2013-10-21 62 views
3

我想发送类作为后ajax参数。jQuery发送类作为POST参数

我的课:

public class PageInput 
    { 
     public string ActionName { get; set; } 
     public string Controller { get; set; } 
     public int CountPage { get; set; } 
     public int CountRecordInPage { get; set; } 
    public KeyValuePair<string, short> No { get; set; } 

    } 

Ajax代码:

$.ajax({ 
     url: '@Url.Action("GetPageNumbers", "MyClasses")', 
     data: '@Model.PageInput', 
     success: function (data) { 
      alert(data); 
     } 
    }); 

行动:

public ActionResult GetPageNumbers(PageInput pageInput) 
    { 
     return PartialView("_PagingNumbers", pageInput); 
    } 

不工作。但为什么?

当actionResult收到数据时为空!!但数据在发送前是正确的。

+0

默认的'.ajax()'类型是''GET'',所以如果您只希望发布数据,您需要将其设置为''POST'。 – ahren

回答

2

您需要将JavaScript代码中创建一个对象,并发送跨代替:

$.ajax({ 
    url: '@Url.Action("GetPageNumbers", "MyClasses")', 
    data: { 
     ActionName: '@Model.ActionName', 
     Controller: '@Model.Controller', 
     CountPage: @Model.CountPage, 
     CountRecordInPage: @Model.CountRecordInPage, 
    }, 
    success: function (data) { 
     alert(data); 
    } 
}); 

你还需要将[HttpPost]属性添加到您的控制器动作

+0

这是一个很好的。但如何发送财产“不”?属性“否”是一个KeyValuePair。 – john

+0

它是否从该属性开始工作? – levelnis

+0

问题已更新。 – john

0

我的猜测是,你是不是张贴到你的url

$.ajax({ 
    url: '@Url.Action("GetPageNumbers", "MyClasses")', 
    data: '@Model.PageInput', 
    type: 'POST', 
    success: function (data) { 
     console.info(data); 
    } 
}); 

现在它将会发布。

+0

我改变了“type:'POST'”但不起作用。为什么?空班发布 – john

+0

我需要更多的信息,而不是为什么。给我们一些工作,错误等 –

+0

错误不会发生。但数据发送空 – john

0

你应该使用以下模式:

$.ajax({ 
    url: '@Url.Action("GetPageNumbers", "MyClasses")', 
    data: {"PageInput.CountPage": "@Model.PageInput.CountPage", "PageInput.CountRecordInPage":"@Model.PageInput.CountRecordInPage" }, 
    success: function (data) { 
     alert(data); 
    } 
}); 

我认为它会为你工作。虽然Ajax发布,但您应该在AJAX发布参数中使用该类的名称。

+0

不起作用。 – john

+0

尝试用报价。我用过很多次。 –