加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 06:32:13 所属栏目:asp.Net 来源:网络整理
导读:所以我正在玩我的ASP.NET MVC 4解决方案.每件事情都很好,不停地添加东西,但奇怪的事情开始发生. 我的一个Models属性为null,即使我将Json中的项目传递给它. 这是javascript对象/ json传递它: var obj = { "plc": "False","al": ["386","710"],"pl": ["9530",
所以我正在玩我的ASP.NET MVC 4解决方案.每件事情都很好,不停地添加东西,但奇怪的事情开始发生.

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

这是javascript对象/ json传递它:

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

我正在使用自定义模型绑定器…认为这可能是问题所以我把它关掉了.

尝试使用.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解决方案.重现这个bug.

这是来自Index.cshtml视图

@{
    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","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; }
    }
}

是的,这个bug仍然存在.

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

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

如果我将“plc”重命名为“cpl”它的工作原理.

那么这里发生了什么……模型绑定器中是否有任何命名限制?我在这里错过了什么?

更新1

工作

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

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

不要工作

PL服务器端现在具有空值.

var obj = {
    "pl": ["9530","alc": "false","pl-odd-value": "false"
};

工作

PL有json对象字符串的3个值…

var obj = {
    "pl": ["9530","odd-value-pl": "false"
};

解决方法

安装 ImranB.ModelBindingFix nuget package.我认为你正在遇到我在 this blog post年讨论过的一个错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读