可以从Javascript文件访问MVC ViewBag对象吗?
是否可以从MVC应用程序中的javascript文件执行以下操作?
$(function(){ alert(@ViewBag.someValue);
}
当前它引发错误:
引用未定义的XML名称@ViewBag
回答:
我不认为目前有任何方法可以做到这一点。Razor引擎不解析Javascript文件,仅解析Razor视图。但是,您可以通过在Razor视图中设置变量来完成所需的操作:
<script> var someStringValue = '@(ViewBag.someStringValue)';
var someNumericValue = @(ViewBag.someNumericValue);
</script>
<!-- "someStringValue" and "someNumericValue" will be available in script -->
<script src="js/myscript.js"></script>
正如Joe在评论中指出的那样,如果其中只有一个引号,则上面的字符串值将中断。如果要完全固定,则必须将所有单引号替换为转义的单引号。问题在于所有突然的斜线都成为问题。例如,如果您的字符串是“
foo \' bar
”,而您替换了单引号,那么结果将是“ foo \\'
bar”,您就回到了同样的问题。(这是链接编码的古老难题。)处理此问题的最佳方法是将反斜杠和引号视为特殊字符,并确保它们 转义:
@{ var safeStringValue = ViewBag.someStringValue
.Replace("\\", "\\\\")
.Replace("'", "\\'");
}
var someStringValue = '@(safeStringValue)';
以上是 可以从Javascript文件访问MVC ViewBag对象吗? 的全部内容, 来源链接: utcz.com/qa/412801.html