Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript外部JS文件中管理魔术字符串的最佳方法_Javascript_Asp.net Mvc_Asp.net Mvc 4_Views_T4mvc - Fatal编程技术网

在JavaScript外部JS文件中管理魔术字符串的最佳方法

在JavaScript外部JS文件中管理魔术字符串的最佳方法,javascript,asp.net-mvc,asp.net-mvc-4,views,t4mvc,Javascript,Asp.net Mvc,Asp.net Mvc 4,Views,T4mvc,如果T4MVC不能扩展到外部JavaScript文件,我想找到管理“神奇字符串”的最佳方法,比如JQuery.load()方法中的控制器/操作值 我希望将更改操作以证明应用程序中存在错误的风险降至最低。我知道我可以用VisualStudio编译视图来查找客户端错误,但不能在JS外部文件中 我发现了一些解决方案,比如将视图作为javascript文件类型包含在内,这样我就可以使用T4MVC并检测视图编译错误,但这种方法使服务器不需要请求,如果是JS,则会在客户端缓存 我考虑的是一个常量JS文件,或

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

我希望将更改操作以证明应用程序中存在错误的风险降至最低。我知道我可以用VisualStudio编译视图来查找客户端错误,但不能在JS外部文件中

我发现了一些解决方案,比如将视图作为javascript文件类型包含在内,这样我就可以使用T4MVC并检测视图编译错误,但这种方法使服务器不需要请求,如果是JS,则会在客户端缓存

我考虑的是一个常量JS文件,或者限制为一个带有T4MVC参数方法的常量视图文件

有更好的主意吗

我在这里留下一个样本:

<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>

$(函数(){
$(“#类别_Id”)
.瀑布(
{
url:“@url.Action(MVC.Ad.ListCategoryTypeByCategory())”,
paramName:“@MVC.Ad.ListCategoryTypeByCategoryParams.categoryId”,
firstOption:“@HeelpResources.DropdownlistCategoryTypeFirstRecord”,
childSelect:$(“#类别类型_Id”)
})
.瀑布(
{
url:“@url.Action(MVC.Ad.ListMakeByCategory())”,
paramName:“@MVC.Ad.ListMakeByCategoryParams.categoryId”,
firstOption:“@HeelpResources.DropdownlistMakeFirstRecord”,
childSelect:$(“#生成Id”)
});
$('Make#u Id')。级联({
url:“@url.Action(MVC.Ad.ListModelByMake())”,
paramName:“@MVC.Ad.ListModelByMakeParams.makeId”,
第一个选项:“@HeelpResources.DropdownlistModelFirstRecord”,
childSelect:$(“#型号_Id”)
});
});
如果我想把这段代码放在JS外部文件中,如何避免“魔术字符串”


谢谢。

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

我认为您使用的方法很好,这就是我使用的方法。它们并不是真正神奇的字符串,因为您使用的是基于路由的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资源的路径。

您可以使用JavaScriptModel()。 如果你需要这些“魔法字符串”在全球范围内,你应该考虑编写一个过滤器并将它们添加到那里。 下面是一个如何使用JavaScriptModel编写过滤器的示例:


您能否提供代码示例,让您更清楚地了解自己想要实现的目标?您好,我刚刚提供了一个示例,说明了我想要实现的目标。谢谢。我给出的示例只在cshtml文件中工作,在JS外部文件中不可能。有没有一种简单的方法可以使用这个对象包含T4MVC方法?