View 是否正在重置其 Model 中的所有值?
Is View reseting all values in its Model?
在我的模型中,我有一些 DateTime
变量未在视图模板中触及,但在发送到视图之前在 GET 方法中设置为 DateTime.Now
。当我在视图中显示它时,它是确定的(显示实际日期和时间)。
其余变量在表单字段中更改,然后使用 POST 方法发送给控制器的操作。
当我在控制器的 POST 操作中设置断点时,我看到变量的值设置为 {0001-01-01 00:00:00} 即使我没有在任何地方更改值之前。
所以问题是:
View 是否正在重置其模型中的所有值?
你必须到幕后看看这里发生了什么。 GET
方法 returns 设置了变量的模型,传输到客户端。在提交时,客户端获取所有字段并将它们发送到服务器,在那里它再次被解析为 Model
。仅传输作为某些 HTML 代码(例如输入)或通过 JavaScript 在客户端设置的字段。要保留 DateTime
值,您需要为其创建一个 Hidden
字段。
Html.HiddenFor(m => m.DateProperty)
看到这个问题,它涵盖了同样的问题:What does HTML.HiddenFor do?
听起来您的日期时间未包含在发送回服务器的字段中,因此使用 DateTime
默认值 (0001-01-01
) 对其进行了初始化。
如果您希望 POST 处理程序接收它,您需要将它往返回您的服务器:
@Html.HiddenFor(m => m.MyDate)
在我的模型中,我有一些 DateTime
变量未在视图模板中触及,但在发送到视图之前在 GET 方法中设置为 DateTime.Now
。当我在视图中显示它时,它是确定的(显示实际日期和时间)。
其余变量在表单字段中更改,然后使用 POST 方法发送给控制器的操作。
当我在控制器的 POST 操作中设置断点时,我看到变量的值设置为 {0001-01-01 00:00:00} 即使我没有在任何地方更改值之前。
所以问题是: View 是否正在重置其模型中的所有值?
你必须到幕后看看这里发生了什么。 GET
方法 returns 设置了变量的模型,传输到客户端。在提交时,客户端获取所有字段并将它们发送到服务器,在那里它再次被解析为 Model
。仅传输作为某些 HTML 代码(例如输入)或通过 JavaScript 在客户端设置的字段。要保留 DateTime
值,您需要为其创建一个 Hidden
字段。
Html.HiddenFor(m => m.DateProperty)
看到这个问题,它涵盖了同样的问题:What does HTML.HiddenFor do?
听起来您的日期时间未包含在发送回服务器的字段中,因此使用 DateTime
默认值 (0001-01-01
) 对其进行了初始化。
如果您希望 POST 处理程序接收它,您需要将它往返回您的服务器:
@Html.HiddenFor(m => m.MyDate)