2009-04-24 15 views
13

Mam widok, który jest używany do edycji rzeczy, na przykład Zamówienia. Zamówienia mają elementy zamówienia, które można dowolnie dodawać. Tak więc główny widok i zagnieżdżone widoki częściowe.Ajax.BeginForm wewnątrz Html.BeginForm

Każda cząstka powinna mieć formularz ajaxowy do poprawiania ilości każdego elementu zamówienia lub cokolwiek innego.

Zatem:

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.)--> 
<% 
} 

Mam kontroler, który wygląda tak:

[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 
} 

Mój problem jest, że kiedy wysłać formularz Ajax, mam metodę Edit zamiast metod EditLineItem . Obie trasy są mapowane. Czy jest coś takiego jak "nie możesz przesłać formularza Ajax w formularzu HTML", o którym nie wiem?

Odpowiedz

12

Próbowałem dokładnie to samo jakiś czas temu. Bez względu na to, co zrobiłem, nie zrobiłoby to przesłanie AJAX. Więc myślę, że odpowiedź brzmi: tak, nie możesz umieścić przycisku przesyłania formularza AJAX w zwykłym formularzu HTML.

Ale dlaczego powinieneś mieć częściowe przesłanie połączone z całymi przesłaniami? Najprostszym sposobem obejścia tego problemu byłoby użycie żądań JSON z jQuery.

na przykład aktualizację tekstu rozpiętości ilość gdy zmienisz dropdownlist (id = kolejności):

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

</script> 

I kod w "Zamówienia" regulatora:

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

Ten Link może Wsparcie. Pozdrowienia

Edit:

Więc .. link już nie istnieje. Ale dzięki internetowemu komputerowi zwrotnemu mamy this copy :)

2

AFAIA AjaxForm nadal renderuje się jako znacznik formularza, więc będziesz zagnieżdżać formularze, które, jak już zauważyłeś, są nie.

Podejrzewam, że Francisco jest na właściwej linii (choć sugeruję implementację postu, a nie uzyskanie, gdy coś aktualizujesz).

Z poważaniem, TP

Powiązane problemy