c# - MVC 模型绑定(bind)返回对象数组

标签 c# asp.net-mvc asp-classic asp.net-mvc-5

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

 public class MyModel{

     public object Name{get;set;}

 }

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

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

更多信息:

我们有两个站点,一个站点将属性绑定(bind)为字符串,另一个站点将其绑定(bind)为数组[String]。查看堆栈跟踪,两个绑定(bind)事件都通过默认模型绑定(bind)器。所以我们面临的问题是我们的第一个环境与第二个环境有什么不同?两者都使用相同的程序集版本和配置。

最佳答案

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

如您希望对象更改为字符串类型。首先需要编写您选择的 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()。 通过将模型绑定(bind)器的定义添加到 Application_Start()

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

然后在 Post 方法中使用自定义绑定(bind),您将在其中获取表单数据

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

关于c# - MVC 模型绑定(bind)返回对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26869921/

相关文章:

c# - 带有 facebook 登录的 MVC5 空引用

asp.net-mvc - 当您的 View 模型没有与域模型一样多的字段时,您如何忽略/保留 MVC 中的值?

sql - 给定一个日期如何使用经典的 asp 获取该月的第一个和最后一个日期

sql-server - 经典 ASP SQL Server 数据库连接

c# - 在企业库中运行时更改连接字符串

c# - 如何使用 Visual Studio 通过 Xamarin UITest 执行 CI

c# - 在代码块之后附加方括号

javascript - 删除页面重新加载时的查询字符串

C# List nullreference 异常 ASP.net MVC

sql - 使用两个数据库创建查询