7

在一个视图中,我正在使用以下重载HtmlHelper.TextBox

public static MvcHtmlString TextBox(
    this HtmlHelper htmlHelper,
    string name,
    Object value
)

该文档指出:

价值

类型:System.Object

文本输入元素的值。如果此值为nullViewDataDictionary,则从对象中检索元素的值。如果那里不存在值,则从ModelStateDictionary对象中检索该值。

当我调用这个重载时,我确实提供了一个value,并且这个值不为空。然而,文本框的值是从ModelStateDictionary那里检索到的。

为了强制文本框使用内联提供的值,我必须首先在控制器中重置模型(或从键集合中删除带有文本框名称的键)。

这同样适用于由 . 呈现的其他控件HtmlHelper

我的理解哪里错了?或者这是文档中的错误?

4

3 回答 3

2

ModelState在所有输入助手中始终具有优先权,而不仅仅是TextBox. 这允许您在视图中指定默认值,并在 POST 后渲染发布的值(取自 ModelState),而无需手动将发布的值传递给视图。要使用不同的值,您必须从 ModelState 中删除该条目。

于 2012-09-14T23:51:15.280 回答
1

这就是模型绑定器的工作方式,它从模型状态中获取值,可能是为了保留回发失败或验证失败的值。您是否尝试过使用 Html 属性来设置值

Html.TextBox("Id", new { Value = Model.Id})

于 2012-09-05T10:33:46.247 回答
-1

也许这会有所帮助。

使用具有以下属性的视图模型和 ViewData["textboxvalue"]

public string Id { get; set; }

如果您提供了一个可以绑定到“value”参数中的对象,那么 html 助手将始终使用它的值。

- 绑定到视图模型的文本框值 - 这些显示模型的 id

@Html.TextBox("Id", Model.Id)

- 带有视图数据提供值的文本框 - 这些显示视图数据的值

@Html.TextBox("Id", ViewData["textboxvalue"])

即使提供的名称与属性名称不同,其值仍然是模型提供的值

- 绑定到视图模型的文本框值 - 这些显示模型的 id

@Html.TextBox("Id2", Model.Id)

- 带有视图数据提供值的文本框 - 这些显示视图数据的值

@Html.TextBox("Id2", ViewData["textboxvalue"])

如果您提供自己的自定义

- 提供硬编码值的文本框 - 这显示了视图中提供的字符串

@Html.TextBox("Id", "my hardcoded value in view")

文档说明 - 如果您不填充“值”参数,如下所示:

@Html.TextBox("Id", null)

然后 mvc 框架会自动尝试搜索绑定到视图的模型和数据字典。

如果你有这种情况,那么

- 在视图模型中找到一个名为“Id”的属性。文本框值设置为模型的值

@Html.TextBox("Id", null)

但如果“名称”值不是模型/字典中的属性/键,则框架找不到任何值,因此文本框值将为空字符串

- 名称不是视图模型或视图数据中的属性的文本框

@Html.TextBox("Id2", null)
于 2012-09-14T15:59:31.767 回答