2009-04-24 61 views
13

我有一个用于编辑东西的视图,比如Orders。订单包含可以任意添加的订单项。所以主视图和嵌套的部分视图。Ajax.BeginForm在Html.BeginForm里面

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

这样:

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

     <--! (ajax form's submit button, etc.)--> 
    } 
    %> 
    <--! (ajax form's submit button, etc.)--> 
<% 
} 

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

[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表单,我得到的编辑方法,而不是EditLineItem方法。两条路线都被映射。有没有像我不知道的“你不能在一个Html表单中提交Ajax表单”的问题?

回答

12

我刚才尝试了完全相同的东西。不管我做了什么,它都不会做AJAX提交。所以我想答案是:是的,你不能在常规的html表单中放置一个AJAX表单的提交按钮。

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

,例如,当你改变一个下拉列表更新数量跨度文本(ID =顺序):

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('select#Order').change(function() { 
      $.getJSON('/Orders/UpdateQty/' + this.value, {}, 
       function(data) { 
        $('#qty').html(data); 
       }); 
     }); 
    }); 

</script> 

而在 “订单” 控制器代码:

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

Link威力帮帮我。 问候

编辑:

所以..链接不再存在。但由于互联网的回归机,我们有this copy :)

2

AFAIA的AjaxForm仍然呈现为一个窗体标签,所以你会嵌套形式,这是你找到的是一个不。

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

亲切的问候, TP

相关问题