将javascript从视图传输到单独的JS文件

时间:2013-08-13 14:04:09

标签: javascript jquery asp.net-mvc

我正在研究遗留应用程序,我想将一些JS代码移到单独的JS文件中。

我将不得不折射一些代码来执行此操作。我可以将@Url.Content语句放入HTML中的数据属性中。

但是我该如何替换这行代码呢?

var array = @Html.Raw(Json.Encode(ViewBag.JobList));

单独的JS文件不知道@Html.Raw的含义。

4 个答案:

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