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 助手之一基于字符串名称生成字段时,它将检查几个位置以获取该字段的潜在值:ViewBagViewDataModelRequest。如果其中任何一个具有与字段的字符串名称匹配的 key/property,它将假定您希望该字段具有该值(即,如果 ViewBag.TEST_NAMEViewData["TEST_NAME"]Model.TEST_NAMERequest["TEST_NAME"] 设置为 5,然后将选中相同的单选按钮。

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