Javascript Viewbag是否更改onclick中的值?

Javascript Viewbag是否更改onclick中的值?,javascript,asp.net-mvc,viewbag,Javascript,Asp.net Mvc,Viewbag,所以我在一个相当大的MVC应用程序中使用了一个viewbag。 (我知道Viewbag没有那么好,但出于明显的原因,我不得不继续以与以前的开发人员相同的风格进行编程) 今天我偶然发现了一个关于viewbag的非常奇怪的问题。我试图使用viewbag值作为参数在onclick函数中调用javascript函数。该函数执行重定向,该函数工作正常,但由于某些原因,我的viewbag值发生了更改 IncludeAcknowledged值在函数中从True更改为onclick 以下是我使用的代码(带有一些

所以我在一个相当大的MVC应用程序中使用了一个viewbag。 (我知道Viewbag没有那么好,但出于明显的原因,我不得不继续以与以前的开发人员相同的风格进行编程)

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

IncludeAcknowledged值在函数中从
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()&..."