Ajax.BeginForm внутри Html.BeginForm

У меня есть представление, которое используется для редактирования материалов, например Orders. Заказы имеют позиции, которые могут быть добавлены произвольно. Таким образом, основной вид и вложенные частичные просмотры.

Каждая часть должна иметь форму ajax для настройки количества каждой позиции или любого другого.

Таким образом:

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

        <--! (ajax form submit button, etc.)-->
    }
    %>
    <--! (ajax form 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, я получаю метод Edit вместо методов EditLineItem. Оба маршрута отображаются. Есть ли какая-то информация о том, что "вы не можете представить форму Ajax внутри формы Html", о которой я не знаю?

Ответы

Ответ 1

Я попробовал ту же самую вещь некоторое время назад. Независимо от того, что я сделал, он не будет подавать AJAX. Поэтому я думаю, что ответ: да, вы не можете поместить кнопку отправки для формы AJAX внутри обычной html-формы.

Но почему у вас есть частичные представления, объединенные с полными представлениями? Простейшим обходным пути для этого imo было бы использование запросов JSON с jQuery.

например, обновляя текст диапазона диапазона при изменении выпадающего списка (id = Order):

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

Эта Ссылка может помочь. Отношения

Edit:

Итак, ссылка больше не существует. Но благодаря машине интернет-обратного пути мы эту копию:)

Ответ 2

AFAIA AjaxForm по-прежнему отображается как тег формы, поэтому вы должны быть вложенными формами, которые, как вы нашли, это нет.

Я считаю, что Франциско на правильных строках (я бы предложил реализовать пост, а не получать, поскольку вы что-то обновляете).

С уважением, TP