我正在研究遗留应用程序,我想将一些JS代码移到单独的JS文件中。
我将不得不折射一些代码来执行此操作。我可以将@Url.Content
语句放入HTML中的数据属性中。
但是我该如何替换这行代码呢?
var array = @Html.Raw(Json.Encode(ViewBag.JobList));
单独的JS文件不知道@Html.Raw
的含义。
答案 0 :(得分:2)
这样的服务器端代码不能在单独的javascript文件中运行。我解决这些问题的方法是在onload事件中运行一个简短的javascript部分。在那里,您可以设置可以在单独的javascript文件中使用的变量:
头脑中的:
array = @Html.Raw(Json.Encode(ViewBag.JobList));
在单独的javascript文件中:
var array;
然后,在单独的javascript文件中,您可以根据需要使用数组。
答案 1 :(得分:1)
我认为您需要使用JavaScriptResult
创建操作public ActionResult Test()
{
string script = "var textboxvalue=$('#name').val();";
return JavaScript(script);
}
但是,在继续之前,请通过以下链接
答案 2 :(得分:1)
ViewBag.JobList
数据仅在HTML页面生成时已知。要将其包含在外部JavaScript文件中,您必须拥有另一个重新计算ViewBag.JobList
的ASP.NET资源,然后将其作为动态JavaScript文件的一部分。这非常低效。
相反,做你正在做的URL:通过DOM传递数据。如果您正在写入普通DOM而不是脚本块,则不再需要原始输出(*),正常的HTML转义很好:
<script
id="do_stuff_script" src="do_stuff.js"
data-array="@Json.Encode(ViewBag.JobList)"
></script>
...
var array = $('#do_stuff_script').data('array');
// jQuery hack - equivalent to JSON.parse($('#do_stuff_script').attr('data-array'));
(实际上,原始输出可能是一个安全漏洞,取决于您正在使用的JSON编码器以及它是否选择将</script
转义为\u003C/script
。写入HTML,具有良好的效果 - 理解HTML编码要求,这是一个好主意,因为它也避免了这样的问题。)
答案 3 :(得分:1)
我也会遵循MelanciaUK的建议:
在你的javascript文件中,将你的代码放在一个函数中:
function MyViewRefactored( array ){
... your code ...
}
在您看来,留下一个最小的javascript集团:
<script>
var array = @Html.Raw(Json.Encode(ViewBag.JobList));
MyViewRefactored( array );
</script>