【问题标题】:Ajax passed over data shows as null in C#?Ajax 传递的数据在 C# 中显示为空?
【发布时间】:2013-12-30 01:50:54
【问题描述】:

我正在尝试将一些 JSON 格式的数据从我的 ajax 帖子发送到 C# 中的控制器方法。虽然我没有得到任何数据。我正在验证数据是否存在,因此在 ajax 的第二位之前有一个 console.log(data.model) 可以做到这一点。无论模型在 C# 方面始终为空。

Javascript 帖子:

$.ajax({
    data: model,
    cache: false,
    type: 'post',
    traditional: true,
    url: mod.RespondentsTableUrl,
    success: function (data) {
        console.log(data.model);
        if (data.success) {
            $('table.coldListTable').dataTable().fnRefreshTable(data.model);

            $('#numberOfResults').text(data.model.length);
            if (thereAreFiltersInPlace(model)) {
                $('#coldListFilterForm div.alert-container > div.nNote > p').text(String.format(Culture.Phrases.FiltersNoteFormat, data.model.length));
                $('#coldListFilterForm div.alert-container > div.nNote.dn').removeClass('dn');
            }
            else {
                $('#coldListFilterForm div.alert-container > div.nNote').addClass('dn');
            }

            console.log(JSON.stringify(data.model));
            $.ajax({
                data: JSON.stringify(data.model),
                cache: false,
                type: 'post',
                url: 'Respondents/DownloadCSV',
            });
        }
        else {
            errorDialog();
        }
    },
    error: errorDialog,
    complete: function () {
        //unhide cold list / filters, hide loader div.
        $('#loader').addClass('dn');
    }
});

型号:

public class RespondentCoreDataViewModel
    {
        public RespondentsData[] RepondentsCore { get; set; }
    }

    public class RespondentsData
    {
        public string Class { get; set; }
        public Data Data { get; set; }
        public int Id { get; set; }
        public string Url { get; set; }
        public object HtmlAttributes { get; set; }
        public bool IsLocked { get; set; }
    }

    public class Data
    {
        public string Name { get; set; }
        public string Source { get; set; }
        public object Email { get; set; }
        public string City { get; set; }
        public string State { get; set; }
        public string Gender { get; set; }
        public string Ethnicity { get; set; }
        public string Age { get; set; }
        public string LastRecruiter { get; set; }
        public string OwningRecruiter { get; set; }
        public string RecruitingGroup { get; set; }
        public string LastActionDate { get; set; }
        public string Status { get; set; }
        public string _class { get; set; }
        public string url { get; set; }
        public int Id { get; set; }
        public long created { get; set; }
    }

控制器方法:

[HttpPost]
        public ActionResult DownloadCSV(RespondentCoreDataViewModel model )
        {
            ....random code in here
        }

最后是 Json String 以防万一有人感兴趣:

[{"Class":"respondent clickable gradeA","Data":{"Name":"John Keys","Source":"<span style=\"display:none;\" >Database</span><i class=\"tipN icon-tasks\" original-title=\"Database\"></i>","Email":null,"City":"","State":"","Gender":"","Ethnicity":"","Age":"","LastRecruiter":"Ben Mabry","OwningRecruiter":"Ben Mabry","RecruitingGroup":"Board 2- Competitive Users","LastActionDate":"<span class=\"dn\">20131008175555</span>10/8 5:55 PM","Status":"<span style=\"display:none;\" >Completed</span><i class=\"tipN icon-check\" original-title=\"Completed\"></i>","class":"respondent clickable gradeA","url":"/Projects/644/Respondents/260619/Overview","Id":260619,"created":1386796133808},"Id":260619,"Url":"/Projects/644/Respondents/260619/Overview","HtmlAttributes":null,"IsLocked":false},{"Class":"respondent clickable gradeA","Data":{"Name":"Jim Walser","Source":"<span style=\"display:none;\" >Database</span><i class=\"tipN icon-tasks\" original-title=\"Database\"></i>","Email":null,"City":"","State":"","Gender":"","Ethnicity":"","Age":"","LastRecruiter":"Ben Mabry","OwningRecruiter":"Ben Mabry","RecruitingGroup":"Board 2- Competitive Users","LastActionDate":"<span class=\"dn\">20131008175529</span>10/8 5:55 PM","Status":"<span style=\"display:none;\" >Completed</span><i class=\"tipN icon-check\" original-title=\"Completed\"></i>","class":"respondent clickable gradeA","url":"/Projects/644/Respondents/260620/Overview","Id":260620,"created":1386796133808},"Id":260620,"Url":"/Projects/644/Respondents/260620/Overview","HtmlAttributes":null,"IsLocked":false},{"Class":"respondent clickable gradeA","Data":{"Name":"Jill Lellis","Source":"<span style=\"display:none;\" >Database</span><i class=\"tipN icon-tasks\" original-title=\"Database\"></i>","Email":null,"City":"","State":"","Gender":"","Ethnicity":"","Age":"","LastRecruiter":"Luanne Jones","OwningRecruiter":"Luanne Jones","RecruitingGroup":"Board 1-Mission Brand","LastActionDate":"<span class=\"dn\">20131009110258</span>10/9 11:02 AM","Status":"<span style=\"display:none;\" >Completed</span><i class=\"tipN icon-check\" original-title=\"Completed\"></i>","class":"respondent clickable gradeA","url":"/Projects/644/Respondents/260621/Overview","Id":260621,"created":1386796133808},"Id":260621,"Url":"/Projects/644/Respondents/260621/Overview","HtmlAttributes":null,"IsLocked":false},{"Class":"respondent clickable gradeA","Data":{"Name":"Charlie Neese","Source":"<span style=\"display:none;\" >Database</span><i class=\"tipN icon-tasks\" original-title=\"Database\"></i>","Email":null,"City":"","State":"","Gender":"","Ethnicity":"","Age":"","LastRecruiter":"Luanne Jones","OwningRecruiter":"Luanne Jones","RecruitingGroup":"Board 2- Competitive Users","LastActionDate":"<span class=\"dn\">20131009112301</span>10/9 11:23 AM","Status":"<span style=\"display:none;\" >Completed</span><i class=\"tipN icon-check\" original-title=\"Completed\"></i>","class":"respondent clickable gradeA","url":"/Projects/644/Respondents/260622/Overview","Id":260622,"created":1386796133808},"Id":260622,"Url":"/Projects/644/Respondents/260622/Overview","HtmlAttributes":null,"IsLocked":false},{"Class":"respondent clickable gradeA","Data":{"Name":"Tara Reid","Source":"<span style=\"display:none;\" >Database</span><i class=\"tipN icon-tasks\" original-title=\"Database\"></i>","Email":null,"City":"","State":"","Gender":"","Ethnicity":"","Age":"","LastRecruiter":"Luanne Jones","OwningRecruiter":"Luanne Jones","RecruitingGroup":"Board 2- Competitive Users","LastActionDate":"<span class=\"dn\">20131009112221</span>10/9 11:22 AM","Status":"<span style=\"display:none;\" >Completed</span><i class=\"tipN icon-check\" original-title=\"Completed\"></i>","class":"respondent clickable gradeA","url":"/Projects/644/Respondents/260623/Overview","Id":260623,"created":1386796133808},"Id":260623,"Url":"/Projects/644/Respondents/260623/Overview","HtmlAttributes":null,"IsLocked":false}]

【问题讨论】:

  • 在您的 ajax 调用中添加 contentType: 'application/json; charset=utf-8dataType: 'json'。如果其他一切都正确,这应该可以解决问题。
  • 你的电话应该看起来像jQuery.ajax({ type: 'POST', url: url, contentType: 'application/json; charset=utf-8', data: data, dataType: 'json', success: successCallBack, error: errorCallBack, })
  • @ShuhelAhmed 我同意 callBack 函数设置不正确。不久前我第一次学习 ajax 时遇到了类似的问题。
  • 哦,正如您所期待的RespondentCoreDataViewModel,您的JSON 应该类似于:{"RepondentsCore" : [....]}。你的数组很好。只需用它制作一个 json 对象。

标签: c# javascript ajax asp.net-mvc json


【解决方案1】:

其实我有一个similar problem.

我的解决方案在区块中:

success: function () {
//code here
}

您需要在此处输入成功函数的名称。示例:

success{
//code here
}

ajaxSuccess(result)
{
//code here
}

【讨论】:

    【解决方案2】:

    你已经接近了。我认为这是因为您的操作方法需要一个名为“模型”的命名参数,您需要这样做:

    $.ajax({
    data: {model: model},
    ...
    

    我认为,如果您添加它,您的 ajax 请求将以自动映射到您的操作方法参数的格式发送数据。

    顺便说一句,如果您重命名其中一个参数会更好,data:{model:model} 不是好习惯 IMO 我会重命名您的 js 变量名称,以便清楚起见:

    $.ajax({
    data: {model: jsModel},
    

    【讨论】:

    • 我相信这也与它有关。虽然当我进行更改时,我收到一个新错误:[ArgumentException: Invalid JSON primitive: model.]
    • 我发现问题出在我的 ajax 中。我在上面发布了修复
    【解决方案3】:

    尝试使用 PM 控制台将 Newtonsoft.Json 添加到您的项目中:

    install-package Newtonsoft.Json
    

    并重建您的解决方案。

    【讨论】:

      【解决方案4】:

      假设发送的 JSON(来自 ajax 调用中的 data: model 的模型)是有效的,我会按照 Roman 的建议...将 Newtonsoft.Json 添加到您的项目中。

      在处理 JSON 时也应该使用 JsonResult 方法而不是 ActionResult:

      public JsonResult DownloadCSV(RespondentCoreDataViewModel model )
      {
         // blah blah
      }
      

      【讨论】:

        【解决方案5】:

        我找到了答案。我不得不改变我的 ajax 脚本,让它看起来像这样,它就可以工作了!哦,忽略那些用于测试的成功和错误。

        $.ajax({
                                data: JSON.stringify(data.model),
                                contentType: 'application/json',
                                type: 'POST',
                                url: 'Respondents/DownloadCSV',
                                success: function () { alert('success'); },
                                error: function () { alert('unsuccessful'); },
                            });
        

        【讨论】:

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