Ajax.BeginForm внутри Html.BeginForm - PullRequest
13 голосов
/ 24 апреля 2009

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

Каждый фрагмент должен иметь форму 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 ]

12 голосов
/ 21 июля 2009

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

Но зачем вам частичные представления объединяться с полными представлениями? Самый простой способ обойти это imo - использовать JSON-запросы с jQuery.

например, обновление текста количественного диапазона при изменении раскрывающегося списка (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));
    }
}

Эта ссылка может помочь. Привет

Edit:

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

2 голосов
/ 28 июля 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...