others - 可不可以从Javascript文件访问 MVC ViewBag对象?

在MVC应用程序中,是否可以从javascript文件执行下列操作?


$(function(){
 alert(@ViewBag.someValue);
}

当前它抛出错误:

reference to undefined XML name @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>

,最好的办法是将反斜杠和引号视为特殊,并确保它们都是转义的:


 @{
 var safeStringValue = ViewBag.someStringValue
 .Replace("","")
 .Replace("'","');
 }
 var someStringValue = '@(safeStringValue)';


你的JavaScript文件可以包含一个类,你可以在视图中实例化该类的新实例,然后在类构造函数中传递ViewBag值。

假设你有以下输入:


<input type="text" id="myInput" data-myValue="@ViewBag.MyValue" />

然后在你的JS文件中,你可以使用:


var myVal = $("#myInput").data("myValue");

为了做到这一点,你的JavaScript文件需要在服务器端是 pre-processed 。 从本质上讲,它将不得不成为 ASP.NET 视图,和 script 标记引用的文件基本上会引用一个控制器动作响应这一观点。

这听起来像是你不想打开的蠕虫。

既然JavaScript是 client-side,为什么不将值设置为client-side元素,并让JavaScript与。 这可能是间接寻址的额外步骤,但它似乎比创建JavaScript视图更少。

像这样:


<script type="text/javascript">
 var someValue = @ViewBag.someValue
</script>

然后外部JavaScript文件可以在该文档范围内引用 someValue JavaScript变量。

甚至:


<input type="hidden" id="someValue" value="@ViewBag.someValue"/>

然后你可以访问隐藏的输入。

除非你想出一些真正光滑的方法来让你的JavaScript文件成为一个视图。 当然是可行的,我可以不容易想任何问题你以来(除了真正丑陋的视图代码视图引擎将得到困惑什么是javascript和 Razor 。 所以期待吨 <text> 标记),所以,如果你找到一个漂亮的方法会很酷,虽然也许unintuitive以后需要支持代码的人。

在Html中:


<input type="hidden" id="customInput" data-value ="@ViewBag.CustomValue" />

在脚本中:


var customVal = $("#customInput").data("value");

...