列表未通过ajax正确传递给MVC 4中的Controller Action

时间:2014-07-02 05:59:15

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

我将一个List(data)和一个ID(id)通过ajax传递给MVC Action(EditDesignTemplate)。

我在data操作中将参数EditDesignTemplate列表的计数设为0,而我可以看到参数id已从ajax中正确捕获了值。

但是如果我提醒它,我可以在jquery中获取存储在数据变量中的值,所以显然列表没有作为空参数传递。此外,参数在下面给出的错误网址中可见。

jQuery的:

            var $trows = $('#ContentPlaceHolder1_FrmView_rptcreation_grdtstrpt').find('tr:has(td)');
            var data = [];
            var report_kid = $('#report_kid').val();
            for (var i = 0; i < $trows.length; i++)
            {
                var $tds = $($trows).eq(i).children('td');
                data.push({ 'id': $tds.eq(0).text(), 'text': $tds.eq(1).text() });
                //alert($tds.eq(1).text());
            }

            $.ajax({
                url: "http://localhost:3916/FormsCreation/EditDesignTemplate/",
                type: 'GET',
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                data: {data:JSON.stringify(data), id:escape(report_kid)},
                success: function (result) {
                }
                });

我的控制器中的操作

public ActionResult EditDesignTemplate(List<data> data, string id)
    {
        var model = new DashBoardModel();
        model.FormDetails = new FormsCreationModel();
        int i=0;
        foreach (var dt in data)
        {
            model.FormDetails.formfields[i].field_id = dt.id;
            model.FormDetails.formfields[i].field_name = dt.text;
            model.FormDetails.formfields[i].field_type = "Field";
            i++;
        }

        model.Controls = new List<ControlsModel>();
        model.Controls = formRepository.GetDesignTempsDet(id);
        model.DesignTemplateId = id;
        return View(model);
    }

班级

public class data
{
    public string id { get; set; }
    public string text { get; set; }
}
收到空列表后

错误消息

XMLHttpRequest cannot load http://localhost:3916/FormsCreation/EditDesignTemplate/?data=%5B%7B%22id%22…22id%22%3A%220000164%22%2C%22text%22%3A%22Sr.+IRON%22%7D%5D&id=0006PL%255C. Invalid HTTP status code 500

问题:

我做错了吗?是不是我不应该通过GET方法传递列表?

我认为当我尝试将其更改为POST动作时,我甚至没有采取行动。得到了404回复...

一些类似的问题

Passing A List Of Objects Into An MVC Controller Method Using jQuery Ajax

MVC Send list through AJAX

PS:我试图通过ajax从ASP.NET Webform访问此MVC操作。我在我的解决方案中运行双项目。

2 个答案:

答案 0 :(得分:1)

试试这个:

var d=JSON.stringify({ 'data': data,'id':escape(report_kid)});
$.ajax({
                url: "http://localhost:3916/FormsCreation/EditDesignTemplate/",
                type: 'POST',
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                data: d,
                success: function (result) {
                }
                });

HTTPPOST添加到Action方法。

[HttpPost]
public ActionResult EditDesignTemplate(List<data> data, string id)
    {
        var model = new DashBoardModel();
        model.FormDetails = new FormsCreationModel();
        int i=0;
        foreach (var dt in data)
        {
            model.FormDetails.formfields[i].field_id = dt.id;
            model.FormDetails.formfields[i].field_name = dt.text;
            model.FormDetails.formfields[i].field_type = "Field";
            i++;
        }

        model.Controls = new List<ControlsModel>();
        model.Controls = formRepository.GetDesignTempsDet(id);
        model.DesignTemplateId = id;
        return View(model);
    }

答案 1 :(得分:0)

试试这个:

var jsonObj = [];
             for (var i = 1; i < myTableArray.length; i++) {
                 var item = {};
                 item["Name"] = myTableArray[i][0];
                 item["Value"] = myTableArray[i][1];

                 jsonObj.push(item)
             }

$.ajax({
                 type: "POST",
                 contentType: "application/json; charset=utf-8",
                 url: "webmethod.aspx/dataarraypass",
                 data: "{html:" + JSON.stringify(jsonObj) + "}",
                 dataType: "json",
                 success: function (data) 

使用此你可以传递多个对象