所以我正在尝试我的 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/