Ada*_*dam 5 javascript c# asp.net-mvc controller
是否可以从ac#controller设置javascript变量?我们有一种情况,我们用一个不需要为用户登录的哑dow版本覆盖我们的母版页.但是,我们的javascript超时计时器仍然运行.我想在覆盖主服务器的控制器方法中,将超时覆盖到巨大的范围.
public dumbDownController()
{
ViewData["MasterPageOverride"] = "~/Views/Shared/_NoLogin.cshtml";
//Somehow reset that timer below from 20 to like 9999. To simulate no timeout.
return View("Cities", model);
}
Run Code Online (Sandbox Code Playgroud)
然后我们的javascript文件了.
tb.sessionTimer = (function () {
var SESSION_TIMEOUT = 20;
var currentTimeoutCounter = SESSION_TIMEOUT * 60;
...
lots more irrelevant to question
...
}
Run Code Online (Sandbox Code Playgroud)
大型应用程序,所以期待几乎不改变JavaScript.想从控制器处理它.
<script>
var xyz = @ViewData["MasterPageOverride"];
</script>
Run Code Online (Sandbox Code Playgroud)
您无法在Controller中直接分配JavaScript变量,但在View中您可以输出可以执行相同操作的JavaScript.
您需要以某种方式将变量传递给View.对于这个例子,我将使用ViewData对象字典.您可以在Controller中设置一个元素:
public ActionResult SomeAction()
{
ViewData["aNumber"] = 24;
}
Run Code Online (Sandbox Code Playgroud)
然后在视图中可以将其用作:
<script>
var xyz = @ViewData["aNumber"];
</script>
Run Code Online (Sandbox Code Playgroud)
哪个将被发送到客户端浏览器:
<script>
var xyz = 24;
</script>
Run Code Online (Sandbox Code Playgroud)
字符串需要更多的关注,因为你需要将它们括在它们之间''或"":
<script>
var xyz = "@ViewData["aString"]";
</script>
Run Code Online (Sandbox Code Playgroud)
正如@Graham在评论中提到的,如果字符串碰巧是有效的JSON(或任何对象文字,但创建JSON非常容易),并且您想将其用作JavaScript对象,则可以:
<script>
var xyz = @ViewData["aJsonString"];
</script>
Run Code Online (Sandbox Code Playgroud)
只需确保输出是有效的JavaScript.
在脚注中,要小心使用特殊的HTML字符,例如<它们会自动进行HTML编码以防止XSS攻击,并且由于您输出的是JavaScript而不是HTML,因此可能会搞砸.为防止这种情况,您可以使用Html.Raw():
<script>
var xyz = @Html.Raw(ViewData["aJsonString"]);
</script>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11867 次 |
| 最近记录: |