Model view controller MVC表单(无关联地)在http get上填充

Model view controller MVC表单(无关联地)在http get上填充,model-view-controller,strong-typing,editorfor,Model View Controller,Strong Typing,Editorfor,似乎有一些基本的MVC部分我不明白。情况如下: 我有View Index.aspx,它有三个局部视图,一个带有表格,两个各有一个表单 这四个视图都是强类型的;父index.aspx有一个包含三个属性的模型,这些属性作为模型传递给局部视图 其中一个局部视图的一个模型允许用户为表创建新记录的表单具有DataAnnotations,以便在提交表单时启用验证。两个表单字段是带有RangeAttribute[Range10009999]的整数,两个是带有DisplayFormatDataFormatStr

似乎有一些基本的MVC部分我不明白。情况如下:

我有View Index.aspx,它有三个局部视图,一个带有表格,两个各有一个表单

这四个视图都是强类型的;父index.aspx有一个包含三个属性的模型,这些属性作为模型传递给局部视图

其中一个局部视图的一个模型允许用户为表创建新记录的表单具有DataAnnotations,以便在提交表单时启用验证。两个表单字段是带有RangeAttribute[Range10009999]的整数,两个是带有DisplayFormatDataFormatString={0:dd/MMM/yyyy}等DisplayFormatAttribute的DateTime

“我的局部视图”使用Html.EditorFor helper作为输入字段,如下所示:

<%: Html.EditorFor<MyType, DateTime>(m => m.StartDate, new { @class = "specialclass" })%>
在我的操作方法中,我为我的父对象创建了一个视图模型,也为部分对象添加了空的视图模型,除了用记录填充的表之外,然后将其传递给我的returnview语句。 我不希望填充表,但是表单字段应该是空的,但是它们不是空的

那么,当我为视图执行HTTP get时,为什么我的表单字段中填充了两个整数字段的0和两个日期字段的最小日期值

我做错了什么/我没有得到什么


我想我的问题是:如果我有一个强类型用户控件,它是一个表单,那么当我为父视图执行http get时,应该如何处理它?我需要向它传递一个模型,对吗?

无论您是否设置值,系统都将尝试显示它们。由于int不可为null,所以在未初始化时,它倾向于返回0,以便清除一个。我假设的DateTime为空,默认为DateTime.Min,正如您指定的,您希望通过字段和格式都有数据。

Ok,这似乎是合理的。谢谢你的回复!因此,还有一个后续问题:这种情况下,您有一个强类型表单,但在最初使用HTTP GET检索视图时,希望不会填充字段,这应该是ASP MVC应用程序中非常常见的情况。获得预期结果的最佳做法是什么,即将所有字段显示为空?我应该更改DisplayFormatAttribute吗?如何设置预期的日期格式?我只想允许用户输入像ddMMMyy这样的值,所有其他格式都不允许。如何在我的模型中限制这一点?