1

我的一个 jquery ajax 帖子将发布数据发送到我的 .NET MVC3 控制器方法,但在控制器方法中,数据显示为空。我有许多其他 ajax 帖子使用几乎相同的方法体,并且它们都工作正常,所以我不确定发生了什么。

阿贾克斯帖子:

$.ajax({
    url: '/Entity/Relate',
    type: 'POST',
    dataType: 'json',
    contentType: 'applicaiton/json; charset=utf-8',
    data: { primaryEntityId: parseInt(entityParentId, 10), relatedEntityId: _createdId },
    success: function (data)
    {
        //do stuff
    },
    error: function ()
    {
        // throw error
    },
    complete: function ()
    {
        //do more stuff
    }
});

控制器方法:

[HttpPost]
public int Relate(int primaryEntityId, int relatedEntityId)
{
    return relationshipRepository.Add(primaryEntityId, relatedEntityId);
}

问题是当我中断 Relate 方法时,primaryEntityId 和 relatedEntityId 为空,即使在 Firebug 中的发布数据中,它显示 {primaryEntityId: 13, relatedEntityId: 486} 已发布到该方法。

关于为什么帖子看起来不错但控制器没有获取数据的任何建议或想法?

4

1 回答 1

4

但在控制器方法中,数据显示为 null

这是不可能的,因为Int32.NET 中的值类型和值类型不能是null. 您可能意味着将它们分配给默认值。反正。

该问题与contentType您在 AJAX 请求中设置的参数有关。您需要删除它,因为您发送的不是 JSON 而是标准application/x-www-form-urlencoded请求:

$.ajax({
    url: '/Entity/Relate',
    type: 'POST',
    dataType: 'json',
    data: { 
        primaryEntityId: parseInt(entityParentId, 10), 
        relatedEntityId: _createdId 
    },
    success: function (data)
    {
        //do stuff
    },
    error: function ()
    {
        // throw error
    },
    complete: function ()
    {
        //do more stuff
    }
});

如果要发送 JSON 请求,请定义视图模型:

public class RelateViewModel
{
    public int PrimaryEntityId { get; set; }
    public int RelatedEntityId { get; set; }
}

然后让您的控制器将此视图模型作为参数:

[HttpPost]
public int Relate(RelateViewModel model)
{
    return relationshipRepository.Add(model.PrimaryEntityId, model.RelatedEntityId);
}

最后发送一个真正的 JSON 请求(使用JSON.stringify方法):

$.ajax({
    url: '/Entity/Relate',
    type: 'POST',
    dataType: 'json',
    contentType: 'application/json;charset=utf-8',
    data: JSON.stringify({ 
        primaryEntityId: parseInt(entityParentId, 10), 
        relatedEntityId: _createdId 
    }),
    success: function (data)
    {
        //do stuff
    },
    error: function ()
    {
        // throw error
    },
    complete: function ()
    {
        //do more stuff
    }
});
于 2012-12-23T17:32:15.737 回答