gpt4 book ai didi

c# - 从 mvc Controller 设置一个 javascript 变量

转载 作者:数据小太阳 更新时间:2023-10-29 06:07:31 26 4
gpt4 key购买 nike

是否可以从 C# Controller 设置 JavaScript 变量?我们有一种情况,我们用不需要用户登录的愚蠢版本覆盖我们的母版页。但是,我们的 javascript 超时计时器仍在运行。我想在重写 master 的 Controller 方法中,将超时重写为巨大的东西。

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);
}

那么我们的javascript文件就有了。

tb.sessionTimer = (function () {
var SESSION_TIMEOUT = 20;
var currentTimeoutCounter = SESSION_TIMEOUT * 60;
...
lots more irrelevant to question
...
}

大型应用程序,因此希望几乎不更改 javascript。想从 Controller 处理它。

最佳答案

简答:

<script>
var xyz = @ViewData["MasterPageOverride"];
</script>

更长的答案:

你不能在Controller中直接赋值JavaScript变量,但是在View中你可以输出JavaScript,它可以做同样的事情。

您需要以某种方式将变量传递给 View 。对于此示例,我将使用 ViewData对象字典。您可以在 Controller 中设置一个元素:

public ActionResult SomeAction()
{
ViewData["aNumber"] = 24;
}

然后在 View 中可以将其用作:

<script>
var xyz = @ViewData["aNumber"];
</script>

这将被发送到客户端浏览器:

<script>
var xyz = 24;
</script>

字符串 需要多加注意,因为您需要将它们括在 '' 之间或 "" :

<script>
var xyz = "@ViewData["aString"]";
</script>

正如 @Graham 在评论中提到的,如果字符串恰好是有效的 JSON(或任何 object literal ,但它是 very easy to create JSON ),并且您想将其用作JavaScript对象,你可以:

<script>
var xyz = @ViewData["aJsonString"];
</script>

只需确保输出是有效的 JavaScript。

在脚注中,请注意特殊的 HTML 字符,例如 <因为它们是自动的 HTML-encoded以防止 XSS 攻击,并且由于您输出的是 JavaScript 而不是 HTML,这可能会把事情搞砸。为防止这种情况,您可以使用 Html.Raw() 喜欢:

<script>
var xyz = @Html.Raw(ViewData["aJsonString"]);
</script>

关于c# - 从 mvc Controller 设置一个 javascript 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13294914/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com