【问题标题】:MVC Controller and data receivedMVC 控制器和接收到的数据
【发布时间】:2017-10-30 07:36:36
【问题描述】:

我正在尝试将 json 发送到我的 mvc 动作控制器,我在网上进行了搜索和研究,但我总是在我的控制器中收到带有所有“空”字段的对象。 我尝试发送一个字符串而不是一个对象,但结果相同,一个空字符串。 我真的不知道有什么问题:

类:

namespace TestUser.Models
{
    public class User
    {
        public string Name { get; set; }
        public string Surname { get; set; }
        public string Email { get; set; }
        public string Sex { get; set; }
        public string Transfer { get; set; }
        public string PercTransf { get; set; }
    }
}

控制器:

    [HttpPost]
    public ActionResult CheckUser(  User dati)
    {

        if (dati != null)
        {

            if (string.IsNullOrEmpty(dati.Name))
                return Json("Insert the name");
            if (string.IsNullOrEmpty(dati.Surname))
                return Json("Insert the surname");
            if (dati.Sex != "m" && dati.Sex != "f")
                return Json("Insert the sex");

            return Json("OK");
        }
        else
        {
           return Json("No valid data");
        }

    }

阿贾克斯:

function checkAndSaveData() {
        var obj = new Object();
        obj.Name = $("#nome").val();
        obj.Surname = $("#cognome").val();
        obj.Email = $("#email").val();
        obj.Sex = $('#selectSesso').find(":selected").val();
        obj.Transfer = "no";
        obj.PercTransf = "0";
        if ($('#trasferte:checked').val() == "on") {
            obj.Transfer = "si";
            obj.PercTransf = $("#tempotrasf").val();
        };

        $.ajax({
           type: 'post',
           dataType: 'json',
           url: '@Url.Action("CheckUser")',
           data: JSON.stringify({ obj }),
           success: function (json) {
                if (json == "ok") {
                    $.ajax({
                       type: 'post',
                       dataType: 'json',
                       url: "@Url.Action("Save")",

                       success: function (json) {
                           if (json == "ok") {
                               alert();
                           } else {
                               alert(json);
                           }
                       },
                   });
               } else {
                   alert(json);
               }
           },
        });



    }

【问题讨论】:

  • wo wo wo... 等一下.. 这是什么 -> return Json(dati); 请求 CheckUser 方法?如果仅用于测试目的,我会以某种方式批准。
  • url: dataObject? data: { json: ... }?为什么?
  • 另外你需要把data: { "json": JSON.stringify(obj) },改成data: { dati: JSON.stringify(obj) },
  • 第一次返回仅用于调试和检查对象值,解决问题后我应该删除
  • @Drake 这是什么 -> url: dataObject,?

标签: javascript c# ajax asp.net-mvc model-view-controller


【解决方案1】:

您似乎没有在 ajax 请求中发送 dataObject 对象。

尝试: 数据:{ JSON.stringify(obj) }

此外,您在 ajax 请求的数据字段中传递的对象不需要位于对象的“dati”属性上。

MVC 应该解决剩下的问题!

我总是使用 fiddler 来调试这样的问题,以检查您在 http 请求中发送的 json 是否与您想象的一样:)

【讨论】:

  • 我使用了 fiddler 并删除了“dati”,这就是我在请求中的内容(我在课堂上用大写字母更改了名称并且 oblect):{“obj”:{“Name”:“das ","Surname":"sda","Email":"da","Sex":"m","Transfer":"no","PercTransf":"0"}}
  • 尝试:{"Name":"das","Surname":"sda","Email":"da","Sex":"m",‌​"转接":" no","Per‌​cTransf":"0"}
【解决方案2】:

您的类属性和 javascript 属性应该相同,然后您的控制器操作参数名称应该与 jason 字符串匹配。所以像这样使用JSON.stringify({"dati": obj });

【讨论】:

    【解决方案3】:

    问题中有很多修改,所以我将发布完整的代码。这在测试时对我有用。

    Javascript 代码

    var obj = new Object();
    obj.name = "name";
    obj.surname = "cognome";
    obj.email = "email";
    obj.sex = 'm';
    obj.transfer = "no";
    obj.perctrasf = "0";
    
    $.ajax({
        type: 'post',
        contentType: 'application/json',
        dataType: 'json',
        url: '@Url.Action("CheckUser")',
        data: JSON.stringify({ dati: obj }),
        success: function (json) {
            if (json == "ok") {
                alert("ok");
            } else {
                alert(json);
            }
        },
    });
    

    控制器

        [HttpPost]
        public ActionResult CheckUser(User dati)
        {
            return Json(dati);
        }
    

    型号

    public class User
    {
        public string Name { get; set; }
        public string Surname { get; set; }
        public string Email { get; set; }
        public string Sex { get; set; }
        public string Transfer { get; set; }
        public string PercTransf { get; set; }
    }
    

    【讨论】:

    • 我刚刚更新,我在我的请求中发送了这个 JSON,但仍然是空对象; {"dati":{"name":"sad","surname":"asd","email":"dsa","sex":"m","transfer":"si","PercTrasf": "2"}}
    • @Drake,我已经测试了我的代码并且工作正常。一定有别的东西。您确定班级用户是您在帖子中发布的那个吗? (如果您有字段而不是属性,则无法绑定该类并且您会得到空值)该行中还缺少引号url: @Url.Action("CheckUser"),,应该是url: '@Url.Action("CheckUser")',
    • 我只更新了类和对象中的大写字母。
    • 它们看起来像 public string Name { get; set; } 还是 public string Name; ?我再次询问,因为这会导致您报告的问题。需要声明属性而不是字段,否则无法映射类。
    • 命名空间 TestUser.Models { public class Utente { public string Name { get;放; } 公共字符串姓氏 { 得到;放; } 公共字符串电子邮件 { 获取;放; } 公共字符串性 { 得到;放; } 公共字符串传输 { 获取;放; } 公共字符串 PercTransf { 获取;放; } } }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多