在视图中我使用HtmlHelper.TextBox
的{{3}}:
public static MvcHtmlString TextBox(
this HtmlHelper htmlHelper,
string name,
Object value
)
文档说明:
值
输入:
System.Object
文本输入元素的值。 如果此值为
null
,则会从ViewDataDictionary
对象中检索元素的值。如果那里不存在任何值,则从ModelStateDictionary
对象中检索该值。
当我调用此重载时,我确实提供了value
,并且此值不为null。尽管如此,文本框的值只有在ModelStateDictionary
存在时才会从HtmlHelper
中检索。
为了强制文本框使用内联提供的值,我必须先在控制器中重置模型(或从密钥集合中删除带有文本框名称的密钥)。
同样适用于{{1}}呈现的其他控件。
我的理解在哪里错了?或者这是文档中的错误吗?
答案 0 :(得分:2)
ModelState
在所有输入助手中始终具有优先权,而不仅仅是TextBox
。这允许您在视图中指定默认值,并在POST后呈现发布的值(取自ModelState),而不必手动将发布的值传递给视图。要使用其他值,必须从ModelState中删除该条目。
答案 1 :(得分:1)
这是模型绑定器的工作方式,它从模型状态获取值,可能是为了保留失败的回发或验证失败的值。您是否尝试过使用Html属性设置值
Html.TextBox("Id", new { Value = Model.Id})
的Si
答案 2 :(得分:-1)
也许这会有所帮助。
使用具有以下属性的viewmodel和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")
文档说明 - 如果您没有填充“value”参数,如下所示:
@Html.TextBox("Id", null)
然后mvc框架将自动尝试搜索绑定到视图的模型和数据字典。
如果你有这种情况,那么
- 在视图模型中创建一个名为“Id”的属性。文本框值设置为模型的值
@Html.TextBox("Id", null)
但是如果“name”值不是model / dictionaries中的属性/键,那么框架找不到任何值,所以文本框值将是一个空字符串
- 名称在视图模型或视图数据中不属性的文本框
@Html.TextBox("Id2", null)