MVC模型绑定返回对象的数组

本文关键字:数组 对象 返回 模型 绑定 MVC | 更新日期: 2023-09-27 18:29:59

我有一个具有以下属性的模型:

 public class MyModel{
     public object Name{get;set;}
 }

Name属性在MVC表单上呈现为文本框。提交MVC表单时,Name属性设置为Array[String]类型,长度为1,其中包含我的值。为什么模型绑定器要创建数组,而不仅仅是将属性设置为字符串对象?

不幸的是,我无法更改该属性的返回类型,因为该属性位于第三方代码中。

更多信息:

我们有两个站点,一个站点将属性绑定为字符串,另一个站点则将其绑定为Array[string]。从堆栈跟踪来看,两个绑定事件都经过默认的模型绑定器。所以我们的问题是,我们的第一个环境和第二个环境有什么不同?两者都使用相同的程序集版本和配置。

MVC模型绑定返回对象的数组

您可以通过以下方式覆盖默认模型绑定器的行为。自定义模型绑定器使您能够将默认对象类型更改为您选择的类型。

As您希望对象更改为字符串类型。首先需要编写IModelBinder帮助您选择的实现。

public class CustomBinder : IModelBinder
{
  public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
  {
    HttpRequestBase request = controllerContext.HttpContext.Request;
    string name = request.Form.Get("Name");    
    return name
  }
} 

然后,我们的应用程序将在发布我们需要注册的数据之前点击application_Start()。通过在Application_Start()中添加模型绑定器的定义

 ModelBinders.Binders.Add(typeof(MyModel), new CustomBinder());

然后在Post方法中使用自定义绑定,在那里您将获得表单数据

 public ActionResult Index([ModelBinder(typeof(CustomBinder))] MyModel model)