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 по-прежнему отображается как тег формы, так что вы будете вкладывать формы, которые, как вы обнаружили, являются нет, нет.
Я считаю, что Франциско на правильных линиях (хотя я бы предложил реализовать пост, а не получить, когда вы что-то обновляете).
С уважением, ТП