2017-01-20 37 views
1

我叫actionmethod UpdateDiscount从阿贾克斯下方时,误称为:Actionmethod张贴到其他actionmethod

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} _ 
     ) 

任何想法?

+0

你确定'Details'被调用的'updateDiscount'被激发的同一事件? – Shyju

+0

该脚本是从'Details()'GET方法生成的视图吗?你怎么触发这个脚本? –

+0

@StephenMuecke按下按钮时会调用该脚本。像这样: onclick =“updateDiscount(event)” – hellogoodnight

回答

1

尝试添加约束路线,并检查它是否适合您。

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

我不知道我的VB.net技能100%,但我希望你有一个想法如何做到这一点

routes.MapRoute("SupplierOrderDetails", "supplierorder/{id}", New With {.controller = "SupplierOrder", 
action = "Details"}, 
New With { httpMethod = new HttpMethodConstraint("GET") 
) 

或添加的正则表达式约束像下面

routes.MapRoute("SupplierOrderDetails", "supplierorder/{id}", New With {.controller = "SupplierOrder", 
action = "Details"}, 
New With {.Id= "\d+"} 
) 

随着帮助这些限制条件中,它不会将网址路由到详细信息操作,并会跳过它。

如果你不想走在这条路上,并希望避免写作约束。 你应该改变你的网址格式,并改变你用路由指定这个URL的所有地方。

routes.MapRoute("SupplierOrderDetails", "supplierorderdetails/{id}", New With {.controller = "SupplierOrder", 
action = "Details"} 
) 
+1

我只是要回答你的评论。第二个选择是为我做的。非常感谢 – hellogoodnight

相关问题