我正在开发一个遗留应用程序,我想将一些 JS 代码移动到一个单独的 JS 文件中。
我将不得不折射一些代码来做到这一点。我可以将@Url.Content
语句放入 HTML 中的数据属性中。
但是我将如何替换这行代码呢?
var array = @Html.Raw(Json.Encode(ViewBag.JobList));
一个单独的JS文件不会知道是什么@Html.Raw
意思。
我正在开发一个遗留应用程序,我想将一些 JS 代码移动到一个单独的 JS 文件中。
我将不得不折射一些代码来做到这一点。我可以将@Url.Content
语句放入 HTML 中的数据属性中。
但是我将如何替换这行代码呢?
var array = @Html.Raw(Json.Encode(ViewBag.JobList));
一个单独的JS文件不会知道是什么@Html.Raw
意思。
像这样的服务器端代码不能在单独的 javascript 文件中运行。我对此类问题的解决方案是在 onload 事件上运行的头部有一个简短的 javascript 部分。在那里,您可以设置可以在单独的 javascript 文件中使用的变量:
在头部:
array = @Html.Raw(Json.Encode(ViewBag.JobList));
在单独的 javascript 文件中:
var array;
然后,在单独的 javascript 文件中,您可以对数组进行任何必要的操作。
我也会遵循MelanciaUK的建议:
在您的 javascript 文件中,将您的代码放入函数中:
function MyViewRefactored( array ){
... your code ...
}
在您看来,请留下一个最小的 javascript bloc :
<script>
var array = @Html.Raw(Json.Encode(ViewBag.JobList));
MyViewRefactored( array );
</script>
我认为您需要使用JavaScriptResult创建操作
public ActionResult Test()
{
string script = "var textboxvalue=$('#name').val();";
return JavaScript(script);
}
但是,在继续之前,请通过以下链接
ViewBag.JobList
数据仅在 HTML 页面生成时才知道。要将其包含在外部 JavaScript 文件中,您必须拥有另一个 ASP.NET 资源,该资源重新计算ViewBag.JobList
,然后作为动态 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 编码要求,因为它是一个好主意也避免了这样的问题。)