可以从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

回到顶部