asp mvc controller从ajax接收空值

时间:2014-10-16 19:30:44

标签: c# jquery ajax asp.net-mvc

尝试过找到的方法,但似乎仍无法解决这个问题。 我通过Jquery Aja传递一个对象列表,但似乎控制器正在接收空值(它正在识别列表计数正常)。

jquery代码如下:

var xmlids = Array();

        for (var i = 0; i < orderId.length; i++) {
            var xdata = {
                "XmlOid": "" +orderId[i] + "", 
                "CourierCompany": $("#CourierCompany_"+orderId[i]).val() ,
                "CourierService": $("#CourierService_" + orderId[i]).val(),
                "StoreId" :  storeId 
            };
            xmlids.push(xdata);
        }

var data = { invoices: xmlids };


        $.ajax({
            url: purl,
            type: "POST",
            dataType: "json",
            //contentType: "application/json;",
            async: false,

            data: data,

控制器参数是:

public JsonResult ProcessSaleOrder(List<XMLInvoiceGeneration> invoices)

对象如下:

public class XMLInvoiceGeneration
    {
        public Int64 XmlOid { get; set; }
        public string CourierCompany { get; set; }
        public string CourierService { get; set; }
        public Int64? StoreId { get; set; }
    }

任何帮助表示感谢。

3 个答案:

答案 0 :(得分:3)

我试图复制你的问题。

我创建了一个新的ASP.NET MVC Web应用程序,在Home控制器的索引视图中,我添加了以下内容

<input type="button" id="send" value="Send" />
@section scripts{
    <script type="text/javascript">
        $(function () {
            $("input#send").on("click", function () {
                var xmlids = Array();

                for (var i = 0; i < 2; i++) {
                    var xdata = {
                        "XmlOid": 1,
                        "CourierCompany": "TempData",
                        "CourierService": "Temp",
                        "StoreId": 2
                    };

                    xmlids.push(xdata);
                }

                var data = { invoices: xmlids };

                $.ajax({
                    url: "/Home/ProcessSaleOrder",
                    type: "POST",
                    dataType: "json",
                    async: false,
                    data: data
                });
            });
        })
    </script>
}

我基本上创建了一些临时数据,但试图仍然使用你原来的想法。我的控制器看起来像这样:

[HttpPost]
public ActionResult ProcessSaleOrder(List<XMLInvoiceGeneration> invoices)
{
    return new EmptyResult();
}

当我单击按钮并点击控制器中的断点时,invoices参数包含2个项目,两个项目都包含我在JavaScript代码中设置的值。我不确定为什么你的代码不起作用,但也许你可以使用我的模板来帮助你缩小问题范围。

答案 1 :(得分:1)

试试这个 取消注释// contentType:&#34; application / json;&#34;,

使用JSON.stringify(data)

发送数据
data: JSON.stringify(data)

PS:网址的最佳做法:url: "@Url.Action("method","controller")"

答案 2 :(得分:1)

我在向控制器发送List时遇到了同样的问题。经过很多努力,我找到了它发送为null的原因。返回类型(Class)的字段未添加{get;组; }

 $.ajax({
            url: "/Home/CreateTasks",
            data: ko.toJSON({Id: this.Id, tasks: objList }),             
            type: "POST",
            dataType: "json",
            processData: true,
            contentType: "application/json; charset=utf-8",
            success: data => {
}

我的模型类是: 之后

public class TaskFields
{
    public string Title { get; set; }
    public string Activity { get; set; }
}
public class CreateTaskInput
{
    public int Id { get; set; }
    public TaskFields TaskProperties { get; set; }
}

之前:

public class TaskFields
{
    public string Title;
    public string Activity;
}
public class CreateTaskInput
{
    public int Id;
    public TaskFields TaskProperties;
}

我的控制器方法是:

[HttpPost]
public JsonResult MethodName(int Id, List<CreateTaskInput> tasks)
{
}

我不确定这个答案会对你有所帮助。但它可能会帮助有类似错误的人。谢谢!