【问题标题】:Bind formValue to property of different name, ASP.NET MVC将 formValue 绑定到不同名称的属性,ASP.NET MVC
【发布时间】:2009-10-23 16:06:07
【问题描述】:

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

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

如何正确绑定?

【问题讨论】:

    标签: asp.net-mvc binding


    【解决方案1】:

    不必为此烦恼,只需编写一个 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();
    }
    

    【讨论】:

      【解决方案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();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-08
        • 2021-07-23
        相关资源
        最近更新 更多