【发布时间】:2017-01-20 12:32:46
【问题描述】:
我从下面的 Ajax 调用 actionmethod UpdateDiscount:
function updateDiscount(e) {
e.preventDefault();
var supplierOrderId = $("#supplier-order-id").val();
var discount = $("#discount-input").val();
console.log("supplierOrderId: " + supplierOrderId);
console.log("discount: " + discount);
$.ajax({
url: '/supplierorder/updatediscount',
type: "POST",
data: { supplierOrderId: supplierOrderId, discount: discount },
success: function (response) {
alert("success");
$("#supplier-order-table-container").html(response);
},
error: function (xhr, textStatus, errorThrown) {
console.log(xhr);
console.log(textStatus);
console.log(errorThrown);
}
});
}
UpdateDiscount 的签名如下所示:
<HttpPost()>
Public Function UpdateDiscount(supplierOrderId As Integer, discount As Decimal) As ActionResult
但是,我收到 500 内部错误:
The parameters dictionary contains a null entry for parameter 'id' of non-nullable type
'System.Int32' for method 'System.Web.Mvc.ActionResult
Details(Int32, System.Web.Mvc.FormCollection)' in 'xxx.yyy.SupplierOrderController'.
由于某种原因,会调用 Details 操作方法。值得一提的是,我在该方法处放置的断点没有被命中。 UpdateDiscount 处的断点也未命中。我真的不明白这里有什么问题。我就像这样使用 Ajax 来调用项目中其他地方的操作方法。
编辑。 route.config(对不起 VB :P):
routes.MapRoute("SupplierOrderDetails", "supplierorder/{id}", New With {.controller = "SupplierOrder", .action = "Details"})
...
routes.MapRoute( _
"Default", _
"{controller}/{action}/{id}", _
New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional} _
)
有什么想法吗?
【问题讨论】:
-
你确定
Details被调用updateDiscount被触发的同一个事件吗? -
这个脚本的视图是从
Details()GET 方法生成的吗?你是如何触发这个脚本的? -
@StephenMuecke 按下按钮时调用该脚本。像这样:onclick="updateDiscount(event)"
-
@Shyju 我不知道为什么要调用 Details,但我收到了我提出的错误消息。我没有排除任何额外的代码来向您展示。
-
请注意,
Details()post 方法中的断点永远不会被命中,因为在执行代码之前会抛出错误。
标签: .net ajax asp.net-mvc vb.net asp.net-mvc-routing