2009-04-24 4 views
13

私は物事を編集するために使用されるビューを持っています、例えばOrders。オーダーには、任意に追加できる広告申込情報があります。したがって、メインビューとネストされたpartialviews。Html.BeginFormの中のAjax.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メソッドの代わりにEditメソッドを取得するということです。両方のルートがマップされます。 「私は知らないHTMLフォームの中にAjaxフォームを提出することはできません」のような問題がいくつかありますか?

答えて

12

私はずっと前とまったく同じことを試みました。私が何をしたとしても、それはAJAXの提出をしません。だから答えは:はい、あなたはAJAXフォームのための提出ボタンを通常のHTMLフォームの中に置くことはできません。

しかし、部分提出を完全提出と併合させるのはなぜですか? この簡単な回避策は、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はまだフォームタグとしてレンダリングされていますので、あなたが見つけたフォームはネストしています。

私はFranciscoが正しい行にあると思っています(あなたが何かを更新しているときに投稿するのではなく、投稿を実装することをお勧めします)。

親切に、 TP

関連する問題