mvc4从表单中获取日期值

时间:2013-12-06 12:44:42

标签: c# asp.net-mvc-4

创建结帐系统。部分表格要求使用卡的到期日期。这包括2个小文本框,1个月,1个年份。我在视图中使用了以下代码:

@Html.LabelFor(c => c.expiryDate)
@Html.HiddenFor(c => c.expiryDate.Day)
@Html.TextBoxFor(c => c.expiryDate.Month, new { @class = "ccDate" })
<span class="ccDateSep">/</span>
@Html.TextBoxFor(c => c.expiryDate.Year, new { @class = "ccDate" })

但是,在提交表单时,日期将一直显示为01/01/0001。所有其他领域都很好。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

DateTime struct是不可变的。您不能只创建一个实例并更改其DayMonthYear。您应该直接绑定expiryDate属性,否则您必须在月份和年份值的模型。然后,您可以使用构造函数自己创建实例。

答案 1 :(得分:1)

为了扩展Ufuk的答案,在过去这样做的时候,我创建了日期,月份和年份的属性,我将下拉列表绑定到客户端。然后在控制器中,我将值组合到一个有效的日期并填充属性。例如,对于包含DateOfBirth的类,我的模型可能看起来像这样。

snip
public DateTime dob {get;set;}
public string dobDay {get;set;}
public string dobMonth {get;set;
public string dobYear {get;set;}
snip

我会将下拉列表绑定到dobDay,dobMonth和dobYear字段,然后在您的控制器中将它们重新组合成DateTime,如下所示:

DateTime temp = new DateTime(dobDay, dobMonth, dobYear);
model.dob = temp;

我不确定DateTime构造函数中的参数是否正确,但这是基本的想法。