.NET MVC 4参数中的ajax POST未解析

时间:2014-09-17 21:48:34

标签: ajax asp.net-mvc

我认为我有这个功能:

    function EditButtonClick(e1) {
    var urlString = '@Url.Action( "Create", "Group")';
    var groupItem = {
        GroupCode: e1.getAttribute("data-GroupCode"),
        GroupType: e1.getAttribute("data-GroupType"),
        Description: e1.getAttribute("data-Description"),
        InternalNotes: e1.getAttribute("data-InternalNotes"),
        StatusCode: e1.getAttribute("data-StatusCode"),
        Edit: "true"
    };

    $.ajax({
        type: 'POST',
        url: urlString,
        data: { '': groupItem },
        dataType: 'json'
    }).fail(function () {
        alert('Edit process failed');
    });

}

我的视图模型如下所示:

    [Serializable]
    public class GroupItem : ApplicationModel, IValidatableObject

{

public GroupItem() { }

[DisplayName("Group Code")]
public int GroupCode { get; set; }

public string GroupTypeDescription { get; set; }
[DisplayName("Group Type")]
public int GroupType { get; set; }

[DisplayName("Group Name")]
public string Description { get; set; }

[DisplayName("Internal Notes")]
public string InternalNotes { get; set; }
public string PartialInternalNotes { get; set; }

public string Status { get; set; }
[DisplayName("Status Code")]

public int StatusCode { get; set; }

[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy HH:mm:ss}")]
public DateTime EnterTime { get; set; }
public string UserId { get; set; }
public string ActionType { get; set; }
public bool Edit { get; set; }

最后,我的动作如下:

[HttpPost]
public ActionResult Create(GroupItem groupItem)
{
    if (ModelState.IsValid)
    {
        _groupService.SaveGroup(groupItem);
        return RedirectToAction("List", "Group", new { showAll = false });  
    }
    ViewBag.GroupTypeList = _MasterDataService.GetCodeMasterList((int)Constants.CodeType.GroupType);
    ViewBag.StatusList = _MasterDataService.GetCodeMasterList((int)Constants.CodeType.GroupStatus);
    if (groupItem.GroupCode > 0)groupItem.Edit = true;
    return this.RazorView(groupItem);
}

现在,我在ajax调用之前的视图中设置了一个断点,而在操作顶部的控制器中设置了另一个断点。根据ajax调用之前的检查,我在视图中的groupItem对象中设置的属性都按预期填充。但是,在操作的断点处,GroupItem参数中的所有属性都是默认值。

在另一个视图的其他代码中,我通过表单提交调用这个相同的Action方法。在这种情况下,将按预期填充所有属性。我的ajax电话中缺少什么?

2 个答案:

答案 0 :(得分:1)

您需要使用JSON.stringify首先将对象序列化为JSON,然后指定contentType,以便您的服务器了解它的JSON数据。

所以你完成AJAX函数调用就会变成,

$.ajax({
    type: 'POST',
    url: urlString,
    data: JSON.stringify(groupItem),
    contentType: "application/json",
    dataType: 'json'
}).fail(function () {
    alert('Edit process failed');
});

答案 1 :(得分:0)

试试这个:

$.ajax({
        type: 'POST',
        url: urlString,
        data: { 'groupItem': groupItem },
        dataType: 'json'
    }).fail(function () {
        alert('Edit process failed');
    });