Более одного Http.RenderAction() в одном представлении

StackOverflow https://stackoverflow.com/questions/1804884

  •  05-07-2019
  •  | 
  •  

Вопрос

Как мы все знаем RenderAction() является частью:

  • Asp.net MVC 1 Фьючерс или
  • Asp.net MVC 2 Бета 2

и позволяет нам визуализировать результат действия внутри другого представления или частичного представления.

Описание

  1. У вас есть представление с несколькими частичными представлениями, отображаемыми с помощью RenderAction() помощник.
  2. По крайней мере, два частичных представления отображают <form> вероятно, используя Html.BeginForm() эта обратная передача к исходному виду.
  3. Постбэк не является выполняется через вызов Ajax
  4. Данные обратной передачи проверяются в форме 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) %>

то есть вы задаете имя поля с префиксом, переданным в модели.

Конечно, вы можете изменить это в деталях.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top