发布到控制器时MVC获取空参数错误

时间:2012-04-15 21:29:45

标签: jquery asp.net-mvc

我的mvc控制器中有这个方法:

public void RejectInvoice(int invoiceId)
        {
            var invoice = _unitOfWork.InvoiceRepository.Get((int)invoiceId);

            invoice.Rejected = true;
            invoice.RejectedDateTime = DateTime.Now;

            _unitOfWork.InvoiceRepository.InsertUpdate(invoice);
            _unitOfWork.Save();
        }

在我的脚本文件中,我使用:

调用它
$.post('/Invoice/RejectInvoice/'+ 3, function (data) {

                    });

在萤火虫中我得到了:

enter image description here

什么...........?它清楚地表明我已经提供了3作为参数,但后来声称我发送它为空?

有人可以告诉我这里发生了什么吗?怎么解决?

2 个答案:

答案 0 :(得分:4)

默认模型绑定器将绑定到名为“id”的参数,但您的参数名为invoiceId,因此它不知道将值绑定到它。快速解决方法是将您的POST URL更改为'/Invoice/RejectInvoice/?invoiceId='+ 3

答案 1 :(得分:0)

如果你正在做一个帖子,你还应该为你的方法修饰[HttpPost]属性和 检查发送的参数,我的建议是:

[HttpPost]
public void RejectInvoice(FormCollection collection)
{
    var id = -1;
    if(int.TryParse(collection["invoiceId"], out id))
    {
        var invoice = _unitOfWork.InvoiceRepository.Get(id);

        invoice.Rejected = true;
        invoice.RejectedDateTime = DateTime.Now;

        _unitOfWork.InvoiceRepository.InsertUpdate(invoice);
        _unitOfWork.Save();         
    }

}

至于jquery:

$.post("/Invoice/RejectInvoice/", { invoiceId: "3"}, callback );

(我想,自从我上次使用$ .post以来已经有一段时间了)