T4MVC是不是可扩展到外部JavaScript文件,我想找到管理“Magic Strings”的最佳方法,如JQuery .load()方法中的Controller / Action值。
我想尽量减少更改操作的风险,以便在应用程序中发现错误。我知道我可以使用Visual Studio编译视图以查找客户端错误,但不能在JS外部文件中编译。
我发现了一些解决方案,例如将View作为javascript文件类型包含在内,因此我可以使用T4MVC并检测Views compilaion错误,但这种方法会使服务器成为不必要的请求,如果是JS则会在客户端缓存。 / p>
我正在考虑一个常量的JS文件,或者在限制中,使用T4MVC params方法的常量View文件。
有更好的意识吗?
我在这里留下一个样本:
<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外部文件中,我该如何避免使用“Magic Strings”?
感谢。
答案 0 :(得分:0)
我知道你已经尝试过了,但是如果你想使用T4MVC我会认为从服务器端.cshtml文件返回JS可能是你最好的选择。请注意,这样做并不意味着它不会被缓存在客户端(如果你得到正确的标题)。实际上,从客户端的角度来看,返回一个纯JS文件并返回一个来自.cshtml的文件并不是真正可以区分的。无论哪种方式,它都会让JS回归。
答案 1 :(得分: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);
}
这将缓存在客户端上,但正如David Ebbo所说,你也可以用.cshtml来实现。我认为它更麻烦,因为你仍然需要管理告诉你的javascript代码到具有魔术字符串的.js或json资源的路径。
答案 2 :(得分:0)
您可以使用JavaScriptModel(http://jsm.codeplex.com)。 如果你需要全局这些“魔术字符串”,你应该考虑编写一个过滤器并将其添加到那里。
下面是一个如何使用JavaScriptModel编写过滤器的示例: