0

如果 T4MVC 不能扩展到外部 JavaScript 文件,我想找到管理“魔术字符串”的最佳方法,例如 JQuery .load() 方法中的控制器/动作值。

我想最大程度地降低更改操作以引发应用程序错误的风险。我知道我可以使用 Visual Studio 编译视图以查找客户端错误,但不能在 JS 外部文件中。

我发现了一些解决方案,例如将 View 作为 javascript 文件类型包含在内,这样我就可以使用 T4MVC 并检测 Views 编译错误,但是这种方法会使服务器产生不必要的请求,如果是 JS,它将被缓存在客户端。

我正在考虑一个常量 JS 文件,或者在极限情况下,一个带有 T4MVC 参数方法的常量 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 外部文件中,如何避免“魔术字符串”?

谢谢。

4

3 回答 3

0

我知道您已经尝试过,但是如果您想使用 T4MVC,我认为从服务器端 .cshtml 文件返回 JS 可能是您最好的选择。请注意,这样做并不意味着它不会被缓存在客户端(如果你得到正确的标题)。事实上,从客户端的角度来看,返回一个纯 JS 文件和返回一个来自 .cshtml 的文件并没有真正的区别。无论哪种方式,它都会让 JS 回来。

于 2012-12-31T19:23:53.180 回答
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 资源的路径。

于 2012-12-31T22:02:40.500 回答
0

您可以使用 JavaScriptModel ( http://jsm.codeplex.com )。如果您全局需要这些“魔术字符串”,您应该考虑编写一个过滤器并将它们添加到那里。

下面是一个如何使用 JavaScriptModel 编写过滤器的示例:

http://jsm.codeplex.com/wikipage?title=Use%20JavaScriptModel%20in%20a%20global%20filter&referringTitle=Documentation

于 2013-01-10T08:57:31.057 回答