使用 Ajax 到 POST 到 ASP.Net 控制器 - Post 的数据不正确

Using Ajax to POST to ASP.Net controller - Data for Post incorrect

这是我的 DisputeController 方法存根:

[HttpPost]
public virtual ActionResult UpdateDisputeStatus(DisputeUdpateStatusModel model)
{//some code

这是我的 Ajax 电话:

var url = '/dispute/UpdateDisputeStatus';
var disputeStatusObj = {
    DisputeId: id,
    DisputeStatusId: selectedValue
}

$.ajax({
    url: url,
    cache: false,
    type: 'POST',
    contentType: "application/json; charset=utf-8",
    data: disputeStatusObj,       
    success: function (data) {
        alert('Status Changed Successfully');
    },
    error: function (e) {
        alert('Error: ' + e.status);
    }
});

我知道路由有效,因为代码不使用数据参数就进入了我的方法(显然参数中没有模型)

我试过以下数据格式:

data: {'DisputeId': DisputeId, 'StatusId': DisputeStatusId},  
data: {disputeStatusObj},
data: JSON.Stringify(disputeStatusObj)

使用控制器方法:

[HttpPost]
public virtual ActionResult UpdateDisputeStatus(string disputeId, string statusId)


[HttpPost]
public virtual ActionResult UpdateDisputeStatus(modelname model)

None 其中工作。我收到 Not found 错误或 500 错误。

记住,我知道路由是正确的,当我发送没有数据的请求时,我在这里遗漏了什么?

我是否错误地声明了控制器?

验证您的模型应具有相同的名称和数据类型,因为 post 来自 Jquery 的值未与 属性 的值映射模型.

@Mike 我试过下面的代码

   public class DisputeUpdateStatusModel
    {
        public string DisputeId { get; set; }
        public string DisputeStatusId { get; set; }
    }
    public class DisputeController : Controller
    {

        [HttpPost]
        public virtual ActionResult UpdateDisputeStatus(DisputeUpdateStatusModel model)
        {
            return new ContentResult() { Content = "OK" };
        }
    }

脚本被视为:

<script type="text/javascript">
    var disputeStatusObj = {}
     disputeStatusObj.model = {
        DisputeId: 1,
        DisputeStatusId: 1
    }
    var url = '/dispute/UpdateDisputeStatus';
    $.ajax({
        url: url,
        cache: false,
        type: 'POST',
        contentType: "application/json; charset=utf-8",
        data: JSON.stringify(disputeStatusObj),
        success: function (data) {
            alert('Status Changed Successfully');
        },
        error: function (e) {
            alert('Error: ' + e.status);
        }
    });

</script>

请看

如果这不起作用,你能显示模型 class 吗?

感谢您的所有意见。我的解决方案是上述答案的组合。 我无法让我的代码绑定到模型,所以我回到了基础。 我按照 Stephen Muecke 的建议取出了 contentType: "application/json; charset=utf-8",,并放弃了我的控制器中的模型并将其替换为 string disputeId, string statusId,并且按照 Er Pravin Suthar 的建议确保参数被称为相同的东西。另请注意,data 部分作为 data: { disputeId: disputeId, statusId: statusId } 发送,参数名称周围没有引号。所以我最终得到:

var statusId = statusDropdown.value; 
var disputeId = $("#disputeId").val();      

$.ajax({
    url: "/Dispute/UpdateDisputeStatus",
    data: { disputeId: disputeId, statusId: statusId },
    type: 'POST',
    success: function (data) {
        alert('Success');
    },
    error: function (e) {
        alert('Status not changed' + e.responseText + '  : ' + e.status);
    }       
});

控制器结构为:

    [HttpPost]
    public virtual ActionResult UpdateDisputeStatus(string disputeId, string statusId)

再次感谢您的所有意见!