是否可以从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”,您就回到了同样的问题。(这是链接编码的古老难题。)处理此问题的最佳方法是将反斜杠和引号视为特殊字符,并确保它们 均已 转义:
foo \' bar
foo \\' bar
@{ var safeStringValue = ViewBag.someStringValue .Replace("\\", "\\\\") .Replace("'", "\\'"); } var someStringValue = '@(safeStringValue)';