gpt4 book ai didi

javascript - Viewbag 改变 onclick 中的值?

转载 作者:行者123 更新时间:2023-11-27 23:13:43 28 4
gpt4 key购买 nike

所以我在一个相当大的 MVC 应用程序中使用 viewbag。(我知道 Viewbag 不是那么好,但由于显而易见的原因,我必须继续以与以前的开发人员相同的风格进行编程)

今天我偶然发现了一个关于 viewbag 的非常奇怪的问题。我试图使用 viewbag 值作为参数来调用 onclick 函数中的 javascript 函数。该函数执行重定向,该函数工作正常,但由于某种原因我的 viewbag 值发生了变化??

函数中的 IncludeAcknowledged 值从 True 更改为 onclick

这是我使用的代码(带有一些临时调试的东西):html:

@ViewBag.IncludeAcknoweldge @*displays true*@
<button class="btn btn-default" type="button" onclick="javascript:Common.loadUrl('IncidentMonitor/List/?Date=@ViewBag.DateTime&IncludeAcknowledged=@ViewBag.IncludeAcknoweldged&Source=@ViewBag.Source&SourceId=@ViewBag.SourceId');">@Resources.ButtonCancel</button>
@ViewBag.IncludeAcknoweldged @*displays true*@

在其附近放置断点时我也可以看到 True。但在网络浏览器的检查器中它只显示:

<button class="btn btn-default" type="button" onclick="javascript:Common.loadUrl('IncidentMonitor/List/?Date=&amp;IncludeAcknowledged=onclick&amp;Source=&amp;SourceId=');">Annuleren</button>

知道为什么会发生这种情况吗?我可能可以解决这个问题,但我真的很想知道为什么它会这样。

编辑:通过执行以下操作解决了问题:

<button class="btn btn-default" type="button" onclick='loadUrl()'>@Resources.ButtonCancel</button>
<script>
function loadUrl() {
javascript:Common.loadUrl("IncidentMonitor/List/Date=@ViewBag.DateTime&IncludeAcknowledged=@ViewBag.IncludeAcknoweldged&Source=@ViewBag.Source&SourceId=@ViewBag.SourceId");
}
</script>

但仍然想知道为什么解决方法是正确的,同时将函数放入 onclick 中给出奇怪的 viewbag 值。

编辑2:根据多次要求,操作的 Controller 代码...尽管没有太多可看的,因为我从未在其他地方接触过我的变量:

[HttpGet]
[AuthorizeFunctionality(RequestedFunctionality.Editor)]
public ActionResult Edit()
{

try
{

var editIncidentEventContainer = new EditIncidentViewModel
{
};

ViewBag.IncludeAcknoweldged = true;

return View("_Edit", editIncidentEventContainer);
}
catch (Exception ex)
{
return new RedirectToRouteResult(new RouteValueDictionary{{ "controller", "Error" },
{ "action", "DisplayMessage" },
{ "message", ex.Message }});
}
}

最佳答案

您看到的行为是 MVC-4/Razor-2.0 中添加的称为条件属性的功能的一个不幸的副作用。

在 MVC-4 之前,如果您想手动生成(例如)复选框并根据模型属性设置 checked 属性,则有必要在标记中包含困惑的条件语句设置 checked 属性。使用条件属性,您可以简单地使用

<input type="checkbox" checked="@ViewBag.IsChecked" ... />

如果IsCheckedtrue,它将输出checked="checked",如果false该属性将输出省略。

在 MVC-4+ 中,您现在需要使用 .ToString() 强制 razor 将值计算为 string 而不是 bool,就你的情况而言

onclick="...&IncludeAcknowledged=@ViewBag.IncludeAcknoweldged.ToString()&..."

请注意,您的第二个选项起作用的原因是它没有在 html 属性内进行评估。

您可以在this article中阅读有关条件属性的更多信息。 .

关于javascript - Viewbag 改变 onclick 中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35987832/

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