我从下面的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} _
)有什么想法吗?
发布于 2017-01-20 13:17:03
尝试添加带有约束的路由,并检查它在本例中是否适合您。
要么尝试添加HTTP谓词路由约束。
我不能百分之百肯定我的VB.net技能,但我希望你知道怎么做
routes.MapRoute("SupplierOrderDetails", "supplierorder/{id}", New With {.controller = "SupplierOrder",
action = "Details"},
New With { httpMethod = new HttpMethodConstraint("GET")
)或者添加Regex约束,如下所示
routes.MapRoute("SupplierOrderDetails", "supplierorder/{id}", New With {.controller = "SupplierOrder",
action = "Details"},
New With {.Id= "\d+"}
)在这些违禁品的帮助下,它不会将url路由到详细操作并跳过它。
如果您不想走这条路,并且希望避免写约束。您应该更改您的url模式,并使用路由更改您指定此url的所有位置。
routes.MapRoute("SupplierOrderDetails", "supplierorderdetails/{id}", New With {.controller = "SupplierOrder",
action = "Details"}
)https://stackoverflow.com/questions/41763789
复制相似问题