ViewBag 的奇怪行为
Strange behaviour of ViewBag
我刚刚注意到输入与 ViewBag 一起工作时出现了一些奇怪的行为。
假设我有一个使用 Razor 语法的简单页面,如下所示:
@for (int i = 0; i < 10; i++)
{
@Html.RadioButton("TEST_NAME", i, null)
}
默认情况下没有选中任何单选按钮。
但是当我添加类似 @ViewBag.TEST_NAME = 5;
的内容时,将检查值为 5 的单选按钮。
那么为什么 ViewBag 会这样工作呢?幕后发生了什么?
我不会确切地说那是 "weird" 行为。当您使用 Razor 助手之一基于字符串名称生成字段时,它将检查几个位置以获取该字段的潜在值:ViewBag
、ViewData
、Model
和Request
。如果其中任何一个具有与字段的字符串名称匹配的 key/property,它将假定您希望该字段具有该值(即,如果 ViewBag.TEST_NAME
、ViewData["TEST_NAME"]
、 Model.TEST_NAME
和 Request["TEST_NAME"]
设置为 5
,然后将选中相同的单选按钮。
是的,这是 MVC 框架通过将 ViewBag 属性应用于您的模型状态而在幕后所做的工作的一部分。您可以使用 @Html.RadioButtonFor(...) 指定从特定模型中获取的值。
我刚刚注意到输入与 ViewBag 一起工作时出现了一些奇怪的行为。
假设我有一个使用 Razor 语法的简单页面,如下所示:
@for (int i = 0; i < 10; i++)
{
@Html.RadioButton("TEST_NAME", i, null)
}
默认情况下没有选中任何单选按钮。
但是当我添加类似 @ViewBag.TEST_NAME = 5;
的内容时,将检查值为 5 的单选按钮。
那么为什么 ViewBag 会这样工作呢?幕后发生了什么?
我不会确切地说那是 "weird" 行为。当您使用 Razor 助手之一基于字符串名称生成字段时,它将检查几个位置以获取该字段的潜在值:ViewBag
、ViewData
、Model
和Request
。如果其中任何一个具有与字段的字符串名称匹配的 key/property,它将假定您希望该字段具有该值(即,如果 ViewBag.TEST_NAME
、ViewData["TEST_NAME"]
、 Model.TEST_NAME
和 Request["TEST_NAME"]
设置为 5
,然后将选中相同的单选按钮。
是的,这是 MVC 框架通过将 ViewBag 属性应用于您的模型状态而在幕后所做的工作的一部分。您可以使用 @Html.RadioButtonFor(...) 指定从特定模型中获取的值。