0

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

我将不得不折射一些代码来做到这一点。我可以将@Url.Content语句放入 HTML 中的数据属性中。

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

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

一个单独的JS文件不会知道是什么@Html.Raw意思。

4

4 回答 4

2

像这样的服务器端代码不能在单独的 javascript 文件中运行。我对此类问题的解决方案是在 onload 事件上运行的头部有一个简短的 javascript 部分。在那里,您可以设置可以在单独的 javascript 文件中使用的变量:

在头部:

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

在单独的 javascript 文件中:

var array;

然后,在单独的 javascript 文件中,您可以对数组进行任何必要的操作。

于 2013-08-13T14:08:28.700 回答
1

我也会遵循MelanciaUK的建议:

在您的 javascript 文件中,将您的代码放入函数中:

function MyViewRefactored( array ){
  ... your code ...
}

在您看来,请留下一个最小的 javascript bloc :

 <script>
     var array = @Html.Raw(Json.Encode(ViewBag.JobList));
     MyViewRefactored( array );
 </script>
于 2013-08-13T15:27:55.550 回答
1

我认为您需要使用JavaScriptResult创建操作

public ActionResult Test()
{        
    string script = "var textboxvalue=$('#name').val();";
    return JavaScript(script);
} 

但是,在继续之前,请通过以下链接

于 2013-08-13T14:27:58.157 回答
1

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 编码要求,因为它是一个好主意也避免了这样的问题。)

于 2013-08-13T14:31:00.957 回答