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, я получаю метод Edit вместо методов EditLineItem. Оба маршрута нанесены на карту. Есть ли что-то вроде "вы не можете отправить форму Ajax внутри формы HTML", о которой я не знаю?

2 ответа

Я попробовал ту же самую вещь некоторое время назад. Неважно, что я сделал, 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));
    }
}

Эта ссылка может помочь. С уважением

Редактировать:

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

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

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

С уважением, ТП

Другие вопросы по тегам