所以我在一个相当大的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/[email protected]&[email protected]&[email protected]&[email protected]');">@Resources.ButtonCancel</button>
@ViewBag.IncludeAcknoweldged @*displays true*@
当在它附近放置一个断点时,我也可以看到True。但是在网络浏览器的检查器中,它仅显示:
<button class="btn btn-default" type="button" onclick="javascript:Common.loadUrl('IncidentMonitor/List/?Date=&IncludeAcknowledged=onclick&Source=&SourceId=');">Annuleren</button>
知道为什么会这样吗?我可能可以解决,但真的想知道为什么会这样。
编辑:通过执行以下操作来解决:
<button class="btn btn-default" type="button" onclick='loadUrl()'>@Resources.ButtonCancel</button>
<script>
function loadUrl() {
javascript:Common.loadUrl("IncidentMonitor/List/[email protected]&[email protected]&[email protected]&[email protected]");
}
</script>
但是仍然想知道一个答案,为什么在将函数放入onclick时变通方法是正确的,却给出了奇怪的viewbag值。
edit2:多次请求该操作的控制器代码...虽然没什么可看的,因为我从未在其他地方触摸过我的变量:
[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" ... />
如果IsChecked
是true
,它将输出checked="checked"
,如果false
将省略该属性。
在MVC-4 +,你现在需要使用.ToString()
武力剃刀评估值作为string
,而不是一个bool
,你的情况
onclick="...&[email protected]()&..."
请注意,您第二个选项起作用的原因是它没有在html属性中进行评估。
您可以在本文中了解有关条件属性的更多信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句