2012-12-30 43 views
0

T4MVC是否無法擴展到外部JavaScript文件,我想找到在JQuery .load中管理「Magic Strings」類似Controller/Action值的最佳方式( ) 方法。在JavaScript外部JS文件中管理魔術字符串的最佳方式

我想最大限度地降低操作更改爲在應用程序中導致錯誤的風險。我知道我可以使用Visual Studio編譯視圖來查找客戶端錯誤,但不能在JS外部文件中找到。

我發現了一些解決方案,比如將一個View作爲一個javascript文件類型包含進來,所以我可以使用T4MVC並檢測Views compilaion錯誤,但是這種方法會導致服務器不必要的請求,如果它是JS,它將被緩存在客戶端。

我正在考慮一個常量JS文件,或者在限制中,使用T4MVC params方法的常量視圖文件。

任何更好的理念?

我離開這裏的樣本:

<script type="text/javascript"> 
$(function() { 
    $('#Category_Id') 
     .cascade(
     { 
      url: '@Url.Action(MVC.Ad.ListCategoryTypeByCategory())', 
      paramName: '@MVC.Ad.ListCategoryTypeByCategoryParams.categoryId', 
      firstOption: '@HeelpResources.DropdownlistCategoryTypeFirstRecord', 
      childSelect: $('#CategoryType_Id') 
     }) 
     .cascade(
     { 
      url: '@Url.Action(MVC.Ad.ListMakeByCategory())', 
      paramName: '@MVC.Ad.ListMakeByCategoryParams.categoryId', 
      firstOption: '@HeelpResources.DropdownlistMakeFirstRecord', 
      childSelect: $('#Make_Id') 
     }); 

    $('#Make_Id').cascade({ 
     url: '@Url.Action(MVC.Ad.ListModelByMake())', 
     paramName: '@MVC.Ad.ListModelByMakeParams.makeId', 
     firstOption: '@HeelpResources.DropdownlistModelFirstRecord', 
     childSelect: $('#Model_Id') 
    }); 
}); 
</script> 

我怎樣才能避免「魔弦」如果我想將此代碼放在一個JS外部文件?

謝謝。

+0

您可以包括代碼示例,以使其更清晰,你要實現的目標是什麼? –

+0

嗨,我剛剛舉了一個例子來解釋我想實現的。謝謝。 – Patrick

回答

0

我知道你已經試過了,但如果你想使用T4MVC,我會認爲從服務器端.cshtml文件返回JS可能是你最好的選擇。請注意,這樣做並不意味着它不會被緩存在客戶端(如果您正確獲取標題)。事實上,從客戶端的角度來看,返回純JS文件並返回來自.cshtml的文件並不是真正可區分的。無論哪種方式,它都會讓JS迴歸。

+0

好的謝謝,我會嘗試。 – Patrick

0

我認爲你使用的方法很好,這是我使用的。它們並不是真正的魔術字符串,因爲您使用的是基於路由的Url生成,並且您不必擔心JavaScript中的Url過時。

另一種方法可以是使用一個返回JsonResult控制器操作:

public JsonResult GetConcentrationsMap() { 
     var magicStrings = _magicStringsService.GetAll().Select(c => new { Name= c.Name, Url = c.Url }); 

     return Json(new { urls = magicStrings }, JsonRequestBehavior.AllowGet); 
    } 

這將獲取緩存在客戶端上,但正如大衛博說,就可以實現與.cshtml了。我認爲它更麻煩,因爲你仍然需要管理告訴你的JavaScript代碼具有魔術字符串的.js或json資源的路徑。

+0

我僅在cshtml文件中給出了示例示例,並且在JS外部文件中不可能。 – Patrick

相關問題