我有一个.NET5.0MVC页面,它接受一个模型对象(ClassFoo),该对象在构造时会生成(classBar)的实例。ClassBar有各种属性(FieldA、FieldB、FieldC),都是字符串。
视图内容都在表单中,表单的输入字段都来自ClassFoo.ClassBar的各种属性。最初,当访问页面时,所有表单输入值都为空。但是,当我将数据放入其中,然后提交表单时,当页面加载时,表单值仍然存在。然而,我不明白这是为什么,因为我在控制器操作期间显式地创建了一个新模型,但在将模型返回到视图生成之前,我实际上并没有用post中的内容填充Model.ClassBar。
我希望所有的表单域都是空的,但事实并非如此。我知道如果使用asp.net,表单值会自动存储和恢复,但我不认为在mvc中会发生这种情况。
发布于 2021-09-25 15:24:58
在查看了Nick Albrech在评论中推荐的ModelState之后,我查看了与HtmlHelper.TextBoxFor()相关的提示,其中说明了以下内容:
...将" value“属性添加到包含在以下位置找到的第一个非空值的元素:具有全名的ActionContext.ModelState条目,或针对ViewDataDictionary.Model求值的表达式。有关“全名”的更多信息,请参见IHtmlHelper.NameFor。
因此,实际上发生的事情与我认为asp.net mvc没有做的事情类似,因为它使用所提交表单的名称和值填充来自get/post请求的ModelState。然后,基于这些辅助函数的使用(以及剃刀视图中使用的asp属性),它要么提供来自保存的模型状态表单值的值,要么提供传递给视图的模型。注意:如果将输入元素的值设置为@Model.someProperty,这似乎不起作用
与此不同的是,您不一定需要使用前一个表单提交中的内容来更新模型对象,以便让页面将表单内容填充回屏幕。允许asp.net mvc通过使用这些剃刀帮助器来执行手动任务。
在这件事上向尼克发出呼喊,寻求帮助。是stackOverflow社区的可靠成员。
https://stackoverflow.com/questions/69320499
复制相似问题