0

我正在尝试将表单绑定到控制器中的模型参数。该模型包含一个 DateTime 字段,我希望在提交表单时绑定它。表单字段希望以非标准格式输入日期(由于各种原因,我无法更改)。

控制器动作是:

public ActionResult Registration_Post(RegistrationDetails model)

我只需要在 RegistrationDetails 类中自定义绑定一个 (DateTime) DateOfBirth 属性。所有其余属性都使用默认绑定。

我不想覆盖整个应用程序的 DateTime 绑定 - 只是为了这个单个操作(或者,如果更简单,控制器)。

知道我该怎么做吗?我尝试在操作上使用 ModelBinder 属性,如下所示:

public ActionResult Registration_Post([ModelBinder(typeof(CustomDateTimeBinder)]RegistrationDetails model)

但是,看来我需要为整个 RegistrationDetails 类创建一个自定义活页夹,这似乎有点矫枉过正。

另外,我不希望将自定义格式放在模型属性上,因为该类在其他地方使用,所以我污染了该类。

我正在使用 MVC4。

谁能告诉我处理这个的最好方法?

4

1 回答 1

0

试试这个:创建一个自定义模型绑定器提供程序。

在您的 BindModel 方法中,您必须添加逻辑来处理只有来自 Registration_Post 操作的出生日期具有特殊格式的要求。顺便说一句,您需要绑定整个模型。

using System;
using System.Web.Mvc;
using MvcApp.Models;

public class CustomModelBinderProvider : IModelBinderProvider 
{
    public IModelBinder GetBinder(Type modelType) 
    {
        return modelType == typeof(Person) ? new PersonModelBinder() : null;
    }
}

protected void Application_Start()
{    
    ModelBinderProviders.BinderProviders.Add(new CustomModelBinderProvider());    
}


public class PersonModelBinder : IModelBinder 
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext   
                            bindingContext) 
   {
         //add logic here to bind the person object
   }
于 2013-04-05T17:02:28.203 回答