在我的注册表格中,我必须允许用户输入他的出生日期。这是一个要求,我显示当天的SELECT,月份的SELECT和年份的SELECT。
我制定了一个Html助手扩展程序,用于创建该架构,并命名控件propertyName+".day"
,propertyName+".month"
和propertyName+".year"
。
我的想法是在我的视图模型中,我定义了一个DateTime
属性,然后调用这个帮助器:@Html.DateSelect(m=>m.DateOfBirth)
,但问题是我不知道如何合并前面的3个属性再次DateTime
。
我会得到3个名为dateofbirth.day
,dateofbirth.month
和dateofbirth.year
的POST参数。
如何在MVC3中完成?
谢谢
答案 0 :(得分:2)
你可以写一个custom model binder。
答案 1 :(得分:1)
您需要使用自定义模型装订器:
public class SplitDateTimeBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) {
ValueProviderResult day = bindingContext.ValueProvider.GetValue("propertyName.day");
ValueProviderResult month = bindingContext.ValueProvider.GetValue("propertyName.month");
ValueProviderResult year = bindingContext.ValueProvider.GetValue("propertyName.year");
DateTime result = new DateTime(int.Parse(year), int.Parse(month), int.Parse(day));
return user;
}
}
并在Global.asax中注册:
ModelBinders.Binders.Add(typeof(DateTime), new SplitDateTimeBinder());
我在示例中使用了int.Parse()
,但您可能希望使用int.TryParse()
并正确处理失败的解析。