发送json对象到jsonresult控制器asp.net mvc

时间:2018-12-17 18:00:24

标签: jquery ajax

我正在向我的mvc控制器发送ajax请求。我正在向mvc控制器对象发送一个对象,那里显示为空。

       function add()
        {

         var viftech =
           {
              "id": $("#id").val(),
               "name": $("#name").val(),
               "lastname": $("#lastname").val(),
               "address": $("#address").val()
        };
        var datasent = viftech;
        console.log(datasent);

        $.ajax({
            url: "/VIftech/insertemployee",
            type: "POST",
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify(datasent),
            success: function(data) {
           data ? alert("It worked!",+response.i) : alert("It didn't work.");
           }
          });
    }

我的mvc控制器就是这样。注意viftech对象类具有相同的参数,例如id,name,lastname和address。 如果我像这样指定多个参数,我将获取值。

public JsonResult insertemployee(string id,string name,string 
 lastname,string address)

如果我指定对象,则它始终为null我已经使用了几种方法,但是它不起作用。

public JsonResult insertemployee(Viftech viftech)
    {
        if (string.IsNullOrEmpty(viftech.name))
        {
            return Json("badreques", JsonRequestBehavior.AllowGet);
        }

        return Json(Viftechdb.add(viftech),JsonRequestBehavior.AllowGet);
    }

2 个答案:

答案 0 :(得分:0)

您需要在对象中命名参数。该对象需要使用viftech属性来指示参数名称,否则它将尝试绑定到ID,名称和姓氏。

  var viftech =
               {viftech:{
                  "id": $("#id").val(),
                   "name": $("#name").val(),
                   "lastname": $("#lastname").val(),
                   "address": $("#address").val()
            }};
            var datasent = viftech;
            console.log(datasent);

            $.ajax({
                url: "/VIftech/insertemployee",
                type: "POST",
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                data: JSON.stringify(datasent),
                success: function(data) {
               data ? alert("It worked!",+response.i) : alert("It didn't work.");
               }
              });

答案 1 :(得分:0)

提交表单数据后,默认的模型绑定器将尝试读取表单数据,并将值分配给视图模型对象的相应 properties 。如果您的视图模型类具有 set 表属性,该属性具有与表单数据匹配的名称/结构,则模型绑定程序将能够成功完成此操作。

在您共享的代码中,您不是在创建属性,而是在Viftech类定义中创建字段。因此,模型联编程序无法为此设置值。

要解决此问题,请通过指定setget属性访问器,将它们全部更改为设置表属性。

public class Viftech 
{ 
     public int id { set;get; }  
     public string name { set;get; }   
     public string lastname { set;get; }   
     public string address { set;get; }   
}

侧节点::我还建议对属性名称使用PascalCasing。

public string Name { set;get; } 而不是public string name { set;get; }