Более одного Http.RenderAction() в одном представлении
-
05-07-2019 - |
Вопрос
Как мы все знаем RenderAction()
является частью:
- Asp.net MVC 1 Фьючерс или
- Asp.net MVC 2 Бета 2
и позволяет нам визуализировать результат действия внутри другого представления или частичного представления.
Описание
- У вас есть представление с несколькими частичными представлениями, отображаемыми с помощью
RenderAction()
помощник. - По крайней мере, два частичных представления отображают
<form>
вероятно, используяHtml.BeginForm()
эта обратная передача к исходному виду. - Постбэк не является выполняется через вызов Ajax
- Данные обратной передачи проверяются в форме POST.
Проблема
Когда одна из форм отправляется обратно, другая отображается как неверный.
Кто-нибудь использовал этот шаблон и решил его? Мы должны каким-то образом знать, какие form
выполнил обратную передачу, и нужно только проверить его данные POST.Другим следует либо игнорировать проверку, либо выполнять регулярные проверки. HttpVerb.Get
обработка действий.
Решение
В форме есть скрытое поле, чтобы указать, какое именно.Или можно передать префикс в партиал и добавить его к каждому элементу формы.
О префиксах.Первый способ — иметь два свойства, вызывая Html.RenderPartial("partial", Model.Data1/2.WithPrefix("data1")).
public class FormModel
{
public string Prefix { get; set; }
}
public class FormData
{
public FormModel Data1 { get; set; }
public FormModel Data2 { get; set; }
}
public ActionResult HandlePost(FormData data)
{
if (data.Data1 != null) {} else {}
}
Второй способ тот же, но использует два параметра действия.
public ActionResult HandlePost(FormModel data1, FormModel data2)
{
if (data1 != null) {} else {}
}
В частичном представлении вы делаете
<%= Html.TextBox(Model.Prefix + ".FormModelField", Model.FormModelField) %>
то есть вы задаете имя поля с префиксом, переданным в модели.
Конечно, вы можете изменить это в деталях.