ViewBag的奇怪行为

时间:2015-01-08 19:35:38

标签: c# asp.net-mvc viewbag

我刚刚注意到一些奇怪的输入行为与ViewBag一起工作。

假设我有一个带Razor语法的简单页面,如下所示:

@for (int i = 0; i < 10; i++)
{
    @Html.RadioButton("TEST_NAME", i, null)
}

默认情况下,未检查任何单选按钮。 但是当我添加@ViewBag.TEST_NAME = 5;之类的东西时,将检查值为5的单选按钮。

那么为什么ViewBag会像这样工作?幕后发生了什么?

2 个答案:

答案 0 :(得分:4)

我不会确切地说,这很奇怪&#34;行为。当您使用其中一个Razor助手根据字符串名称生成字段时,它会检查几个位置以查找该字段的潜在值:ViewBagViewDataModelRequest。如果其中任何一个具有与字段的字符串名称匹配的键/属性,则它将假定您希望该字段具有该值(即,如果ViewBag.TEST_NAMEViewData["TEST_NAME"],{{ 1}}和Model.TEST_NAME设置为Request["TEST_NAME"],然后检查相同的单选按钮。

答案 1 :(得分:0)

是的,这是MVC框架在幕后通过将ViewBag属性应用于模型状态所做的工作的一部分。您可以使用@ Html.RadioButtonFor(...)指定从特定模型中获取的值。