View是否重置其模型中的所有值?

时间:2015-01-02 14:31:02

标签: asp.net-mvc asp.net-mvc-4 razor

在我的模型中,我有一些DateTime变量未在View模板中触及,但在发送到View之前在GET方法中设置为DateTime.Now。当我在View中显示它时,它是正常的(显示实际的日期和时间)。 其余变量在表单字段中更改,然后使用POST方法发送到控制器的操作。

当我在控制器的POST操作中设置断点时,我看到变量的值设置为{0001-01-01 00:00:00},即使我没有在任何地方更改值之前。

所以问题是: View是否会重置其模型中的所有值?

2 个答案:

答案 0 :(得分:1)

你必须在幕后看看这里发生了什么。 GET方法返回带有变量集的模型,该变量将传输到客户端。在提交时,客户端获取所有字段并将它们发送到服务器,然后再将其解析为Model。仅传输作为某些HTML代码(例如输入)或通过客户端上的JavaScript设置的字段。要保留DateTime值,您需要为其创建Hidden字段。

Html.HiddenFor(m => m.DateProperty)

请参阅此问题,该问题涵盖同一问题:What does HTML.HiddenFor do?

答案 1 :(得分:1)

听起来您的日期时间不包含在发送回服务器的字段中,因此会使用DateTime默认值(0001-01-01)进行初始化。

如果您希望POST处理程序接收它,您需要将其往返回服务器:

@Html.HiddenFor(m => m.MyDate)