【发布时间】:2011-12-24 05:11:41
【问题描述】:
是否可以在js文件中写入以下行
var lst = @Html.Raw(Json.Encode(ViewBag.List));
【问题讨论】:
-
你的意思是在变量名前加一个@?
-
@James.Xu 那是剃刀。
是否可以在js文件中写入以下行
var lst = @Html.Raw(Json.Encode(ViewBag.List));
【问题讨论】:
您不能在静态 js 文件中使用服务器端代码。您可以在视图中声明此全局变量,然后从单独的 javascript 文件中使用。
【讨论】:
@Html.Raw 复选框不起作用
lst js 变量和某些复选框之间的任何关系。当然,除非您的自定义复选框依赖于它。
你可以让你的js文件动态化,比如任何其他asp.net文件,通过重命名
filename.aspx 例如。那么你修改后的“js”文件将类似于:
<%@ Page Title="" Language="C#" %>
<%
Response.ContentType = "application/x-javascript";
%>
function foo() {
var a = "<%= myVar %>";
}
您可以使用标准方式将其包含在您的页面中:
<script type="text/javascript" src="filename.aspx"></script>
【讨论】:
Html Helpers 只能在视图中使用,而不能在 JavaScript 文件中使用。 为了使事情正常进行,您需要将输入变量写入 View 和 JavaScript 文件中的其余代码。所以,你的代码应该是这样的:
查看:
<script>
var lst = @Html.Raw(Json.Encode(ViewBag.List));
</script>
访问“lst”的其余代码将驻留在 javaScript 文件中:
JS 文件:
$(document).ready(function(){
// access lst here, rest of the code goes here
});
注意:不要忘记在视图中包含 JS 文件。
【讨论】:
我最喜欢的解决方案是将参数作为参数提供:
function foo(parameter) {
var lst = parameter;
...
}
在视图中:
<input type='button' onclick="foo('@Html.Raw(Json.Encode(ViewBag.List))');" />
您也可以使用一个对象来存储每个服务器端属性并将其作为全局属性传递给您的 js。在$(document).ready(); 中进行操作。关于 SO 已经有一个很好的问题,对此有更多的见解。稍后将使用链接进行编辑。
问候,
编辑:阅读this SO question,您会发现更多见解。
【讨论】: