【问题标题】:Map json to model .net mvc 4.5.2将 json 映射到模型 .net mvc 4.5.2
【发布时间】:2016-04-29 02:26:00
【问题描述】:

我创建了一个链接<a href="#" id="ajaxPost">send model as json</a>,它将这个 json 发送到我的控制器:

{
   "textFields":[
      {
         "name":"text",
         "xPath":"/test/text"
      },
      {
         "name":"text2",
         "xPath":"/test/text2"
      }
   ]
}
public PartialViewResult addTextField(List<AddTextFieldModel> textFields) {
    return PartialView("_AddTextField", new AddTextFieldModel("hallo", "123"));
}

通过 jQuery ajax。

$(document).ready(function () {
        var textFields = [
            { name: "text", xPath: '/test/text' },
            { name: "text2", xPath: '/test/text2' }
        ];      
        
        //textFields = JSON.stringify({ 'textFields': textFields });
       
    $("#ajaxPost").on("click", function (e) {
        e.preventDefault();
        $.ajax({
            contentType: 'application/json; charset=utf-8',
            dataType: 'html',
            type: 'POST',
            url: '@Url.Action("addTextField")',
            data: '{ "textFields":' + JSON.stringify(textFields) + '}',
            success: function (data) {
                $('#mainDiv').html(data);
            },
            failure: function (response) {
                alert(response);
                $('#mainDiv').html(response);
            }
        });
       
    });
 });

我遇到的问题; .net mvc 4.5.2 不会将 json 对象映射到我的模型列表:

public class AddTextFieldModel {
    public String Name { get; set; }
    public String XPath { get; set; }

    public AddTextFieldModel(string name, string xPath) {
        Name = name;
        XPath = xPath;
    }
}

除了如何用@Ajax.ActionLink("Add", "addTextField", ???, new AjaxOptions { HttpMethod = "Post", InsertionMode = InsertionMode.Replace, UpdateTargetId = "mainDiv" }) 替换jQuery ajax调用?

【问题讨论】:

  • AFAIK 你必须在模型类中有一个无参数的构造函数才能使模型绑定工作
  • 您尝试将模型从视图绑定到控制器输入。不是 MapJson 来建模....如果你想这样做,那么你需要编写自己的模块来为你处理这个。(真的不认为这是你想要做的)
  • google“mvc 视图到模型绑定”...我相信你会来对的。它是如何从表单中序列化数据的...POST/GET...您可以使用ajax进行模拟,因此这些值绑定在控制器中。
  • 我用谷歌搜索并找到了一些links,但我看不出我的方法有什么不同。
  • @shakib,谢谢我认为默认构造函数无论如何都在那里。现在它的工作。

标签: jquery asp.net json asp.net-mvc-4


【解决方案1】:

当类中定义了构造函数时,Asp.net MVC 模型绑定需要无参数构造函数。更改以下内容应该可以解决问题。

public class AddTextFieldModel{
    public String Name { get; set; }
    public String XPath { get; set; }

    //parameterless constructor
    public AddTextFieldModel() {
    }

    public AddTextFieldModel(string name, string xPath) {
        Name = name;
        XPath = xPath;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多