asp.net-mvc - ASP.NET MVC 4 - ModelBinder 错误

标签 asp.net-mvc model-binding

所以我正在尝试我的 ASP.NET MVC 4 解决方案。一切都工作正常,不断添加东西,但奇怪的事情开始发生。

我的 Models 属性之一为 null,即使我将 Json 中的项目传递给了它。

这是传递给它的 javascript object/json:

var obj = {
    "plc": "False",
    "al": ["386", "710"],
    "pl": ["9530", "211", "783"]
};

我正在使用自定义模型绑定(bind)器...认为这可能是问题所在,因此我将其关闭。

尝试使用 .NET 中的 JavaScriptSerializer 来查看它是否有效:

var reader = new StreamReader(Request.InputStream);
Request.InputStream.Position = 0;
var readToEnd = reader.ReadToEnd();

var javaScript = new JavaScriptSerializer();
var searchFarmOptions = javaScript.Deserialize<Test>(readToEnd);

设置了所有属性...WOOT。

所以我尝试了一个干净的 ASP.NET MVC 4 解决方案。重现该错误。

这是来自 Index.cshtml View

@{
    ViewBag.Title = "title";
}

<h1>Title</h1>
Testing ... 
<script src="/Scripts/jquery-1.8.2.min.js" type="text/javascript"></script>
<script>
$(function() {
    var obj = {
        "1pllort": "False",
        "1plc": "true",
        "al": ["386", "710"],
        "pl": ["9530", "211", "783"]
    };

    var options = {
        "contentType": "application/json; charset=UTF-8",
         "type": "POST",
         "data" : JSON.stringify(obj)
    };
    $.ajax("/Home/TestPost", options).done(function(data) {
        console.log(data);
    });
});
</script>

这是我的 HomeController

using System.Collections.Generic;
using System.Web.Mvc;

namespace MvcApplication3.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View("Index");
        }

        [HttpPost]
        public ActionResult TestPost(Test model)
        {
            return Json(model);
        }
    }

    public class Test
    {
        public List<int> PL { get; set; }
        public List<int> AL { get; set; }
        public bool PLC { get; set; }
        public bool ALC { get; set; }
    }
}

是的,错误仍然存​​在。

每当我有一个以“pl”开头的属性作为我的列表名称时..“pl”列表为空。

此外,它可以是任何以“pl”开头的名称...例如“plchecked”

如果我将“plc”重命名为“cpl”,它就可以工作。

那么这里发生了什么......模型绑定(bind)器中有任何命名限制吗?我在这里缺少什么?

更新 1

工作

PL 服务器端现在拥有正确的值等,不是 null,而是数字列表。

var obj = {
    "pl": ["9530", "211", "783"],
    "1plc": "false",
    "pl-some-odd-value": "false",
    "al": ["386", "710"],
    "alc": "false"
};

不工作

PL 服务器端现在具有 null 值。

var obj = {
    "pl": ["9530", "211", "783"],
    "al": ["386", "710"],
    "alc": "false",
    "pl-odd-value": "false"
};

工作

PL 有 3 个值,其中 json 对象字符串...

var obj = {
    "pl": ["9530", "211", "783"],
    "al": ["386", "710"],
    "alc": "false",
    "odd-value-pl": "false"
};

最佳答案

安装ImranB.ModelBindingFix nuget package 。我认为您遇到了我在 this blog post 中讨论过的错误。 。

关于asp.net-mvc - ASP.NET MVC 4 - ModelBinder 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15115604/

相关文章:

c# - 使用 System.ComponentModel.DataAnnotations 进行模型绑定(bind)

asp.net - 是否可以从 MVC 自定义模型绑定(bind)器获取显示名称?

c# - 将逗号分隔的列表绑定(bind)到 asp.net web api 中的 List<int>

servicestack - 为什么servicestack无法对json post请求进行模型绑定(bind)?

asp.net-mvc - SignalR 跨域 : errors with not allowed by Access-Control-Allow-Origin

asp.net-mvc - 在 MVC 中使用 HtmlHelper 有好处吗?

c# - ASP MVC 3 获取foreach中特定项目的隐藏字段值

javascript - 无法将html表数据绑定(bind)到mvc Controller 模型

c# - 如何在 ASP.NET MVC 5 中获取外部登录的电子邮件地址

c# - MVC 模型绑定(bind)问题 - 对象列表