Html.BeginForm中的Ajax.BeginForm

我有一个用于编辑东西的视图,比如Orders。 订单包含可以任意添加的订单项。 所以主视图和嵌套的偏见视图。

每个部分应该有一个ajax表单,用于调整每个行项目的数量或其他。

从而:

Html.BeginForm() {%> Ship to: blah blah blah <% Ajax.BeginForm("EditLineItem", "Order", new { OrderLineItemID = Model.ObjectID }, itemAjaxOptions)) { Item qty blah blah blah  } %>  <% } 

我有一个看起来像这样的控制器:

 [ActionName("Edit")] [AcceptVerbs(HttpVerbs.Post)] [ValidateAntiForgeryToken] public ActionResult Edit(int orderID) { blah, blah } [ActionName("EditLineItem")] [AcceptVerbs(HttpVerbs.Post)] [ValidateAntiForgeryToken] public ActionResult EditLineItem(Guid orderLineItemID) { blah, blah } 

我的麻烦是,当我提交Ajax表单时,我得到Edit方法而不是EditLineItem方法。 两个路由都已映射。 是否有一些问题,如“你不能在Html表单中提交Ajax表单”,我不知道?

我刚才尝试过同样的事情。 无论我做了什么,它都不会提交AJAX。 所以我认为答案是:是的,你不能在常规的html表单中放置一个AJAX表单的提交按钮。

但是,为什么你会将部分提交与完整提交合并? 这个imo最简单的解决方法是使用jQuery的JSON请求。

例如,更改下拉列表时更新数量范围文本(id = Order):

  

和“Orders”控制器中的代码:

 public class OrdersController : Controller { public ActionResult UpdateQty(int id) { return Json(yourLibrary.getQuantities(id)); } } 

此链接可能有所帮助。 问候

编辑:

所以..链接不再存在。 但是由于互联网的备用机器,我们有这个副本 🙂

AFAIA AjaxForm仍然作为表单标记呈现,因此您可以嵌套表单,正如您所发现的那样,这是一个不行的表单。

我认为弗朗西斯科是在正确的路线上(因为我建议你实施一个post,而不是因为你正在更新某些东西)。

亲切的问候,TP