Javascript Viewbag是否更改onclick中的值?
所以我在一个相当大的MVC应用程序中使用了一个viewbag。 (我知道Viewbag没有那么好,但出于明显的原因,我不得不继续以与以前的开发人员相同的风格进行编程) 今天我偶然发现了一个关于viewbag的非常奇怪的问题。我试图使用viewbag值作为参数在onclick函数中调用javascript函数。该函数执行重定向,该函数工作正常,但由于某些原因,我的viewbag值发生了更改 IncludeAcknowledged值在函数中从Javascript Viewbag是否更改onclick中的值?,javascript,asp.net-mvc,viewbag,Javascript,Asp.net Mvc,Viewbag,所以我在一个相当大的MVC应用程序中使用了一个viewbag。 (我知道Viewbag没有那么好,但出于明显的原因,我不得不继续以与以前的开发人员相同的风格进行编程) 今天我偶然发现了一个关于viewbag的非常奇怪的问题。我试图使用viewbag值作为参数在onclick函数中调用javascript函数。该函数执行重定向,该函数工作正常,但由于某些原因,我的viewbag值发生了更改 IncludeAcknowledged值在函数中从True更改为onclick 以下是我使用的代码(带有一些
True
更改为onclick
以下是我使用的代码(带有一些临时调试内容):
html:
在ViewBag周围使用括号可以实现以下目的:
@(ViewBag.IncludeAcknoweldge)
使用ViewBag的一个问题是没有检查键(没有编译时检查,没有运行时检查)。对于可能相同的变量,您似乎使用了几种不同的拼写:
ViewBag.IncludeAcknoweldge
ViewBag.IncludeAcknoweldged
也许解决这个问题可以解决您的问题?您看到的行为是MVC-4/Razor-2.0中添加的一个称为条件属性的功能的不幸副作用 在MVC-4之前,如果您希望基于模型属性手动生成(比如)复选框并设置
checked
属性,则需要在标记中包含杂乱的条件语句来设置checked
属性。对于条件属性,您可以简单地使用
<input type="checkbox" checked="@ViewBag.IsChecked" ... />
请注意,第二个选项起作用的原因是它没有在html属性中进行计算
您可以在中阅读更多关于条件属性的信息。如何设置
IncludeAcknoweldge
在控制器中,它只需根据表达式设置为true或false即可。我已将该代码更改为ViewBag.Acknoweldged=True
查看该部件是否没有问题。请尝试…&IncludeAcknowledged=@ViewBag.IncludeAcknowledged.ToString()&…
您可以在问题中包含控制器代码吗?@counterflux-您可以删除控制器代码-这与问题无关。这是因为Razor2(MVC-4)引入了条件属性,这是一个不幸的副作用。您需要对布尔属性使用.ToString()
。更详细地解释条件属性我在查看编辑时注意到,我在提供附加代码时犯了一个错误。我在程序中将IncludeAcknoweldged编辑为Acknoweldged,以查看它与一个不幸的命名无关。我重新检查了拼写,但一切正常。此外,即使我拼错了变量,我也会得到类似“undefined”或“null”的东西,而不是“onclick”。
<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>
[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 }});
}
}
ViewBag.IncludeAcknoweldge
ViewBag.IncludeAcknoweldged
<input type="checkbox" checked="@ViewBag.IsChecked" ... />
onclick="...&IncludeAcknowledged=@ViewBag.IncludeAcknoweldged.ToString()&..."