首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在投递到其他Actionmethod时错误调用actionmethod

在投递到其他Actionmethod时错误调用actionmethod
EN

Stack Overflow用户
提问于 2017-01-20 12:32:46
回答 1查看 27关注 0票数 1

我从下面的Ajax调用actionmethod UpdateDiscount

代码语言:javascript
复制
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的签名如下所示:

代码语言:javascript
复制
<HttpPost()>
Public Function UpdateDiscount(supplierOrderId As Integer, discount As Decimal) As ActionResult

但是,我得到了一个500个内部错误:

代码语言:javascript
复制
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):

代码语言:javascript
复制
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} _
        )

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-20 13:17:03

尝试添加带有约束的路由,并检查它在本例中是否适合您。

要么尝试添加HTTP谓词路由约束。

我不能百分之百肯定我的VB.net技能,但我希望你知道怎么做

代码语言:javascript
复制
routes.MapRoute("SupplierOrderDetails", "supplierorder/{id}", New With {.controller = "SupplierOrder", 
 action = "Details"},
 New With { httpMethod = new HttpMethodConstraint("GET") 
)

或者添加Regex约束,如下所示

代码语言:javascript
复制
routes.MapRoute("SupplierOrderDetails", "supplierorder/{id}", New With {.controller = "SupplierOrder", 
 action = "Details"},
 New With {.Id= "\d+"}
)

在这些违禁品的帮助下,它不会将url路由到详细操作并跳过它。

如果您不想走这条路,并且希望避免写约束。您应该更改您的url模式,并使用路由更改您指定此url的所有位置。

代码语言:javascript
复制
routes.MapRoute("SupplierOrderDetails", "supplierorderdetails/{id}", New With {.controller = "SupplierOrder", 
 action = "Details"}
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41763789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档