将formValue绑定到不同名称的属性ASP.NET MVC

时间:2009-10-23 16:06:07

标签: asp.net-mvc binding

我想知道是否有办法将传递给控制器​​的表单值绑定到类属性中具有不同的Id。

表单发布到控制器,其中Person作为参数具有属性Name但实际表单文本框的ID为PersonName而不是Name。

如何正确绑定?

2 个答案:

答案 0 :(得分:3)

不要为此烦恼,只需编写一个反映与表单完全相同的PersonViewModel类。然后使用AutoMapper将其转换为Person

public class PersonViewModel
{
    // Instead of using a static constructor 
    // a better place to configure mappings 
    // would be Application_Start in global.asax
    static PersonViewModel()
    {
        Mapper.CreateMap<PersonViewModel, Person>()
              .ForMember(
                  dest => dest.Name, 
                  opt => opt.MapFrom(src => src.PersonName));
    }

    public string PersonName { get; set; }
}

public ActionResult Index(PersonViewModel personViewModel)
{
    Person person = Mapper.Map<PersonViewModel, Person>(personViewModel);
    // Do something ...
    return View();
}

答案 1 :(得分:2)

您可以拥有自己的自定义模型绑定器。

public class PersonBinder : IModelBinder {
    public object BindModel(ControllerContext controllerContext, 
        ModelBindingContext bindingContext) {
            return new Person { Name =
                  controllerContext.HttpContext.Request.Form["PersonName"] };
    }
}

你的行动:

public ActionResult myAction([ModelBinder(typeof(PersonBinder))]Person m) {
        return View();
}