Более одного Http.RenderAction () в одном представлении - PullRequest
0 голосов
/ 26 ноября 2009

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

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

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

Описание

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

Проблема

Когда одна из форм отправляется обратно, другая отображается как недействительным .

Кто-нибудь использовал этот шаблон и решил его? Мы должны как-то знать, какой form выполнял обратную передачу, и только этот должен проверять свои данные POST. Другие должны либо игнорировать проверку, либо выполнять обычную HttpVerb.Get обработку действий.

1 Ответ

1 голос
/ 26 ноября 2009

Есть скрытое поле в форме, чтобы указать, какое из них. Или передайте префикс частичному и добавьте к каждому элементу в форме.

О префиксах. Первый способ состоит в том, чтобы иметь два свойства, вызывая Html.RenderPartial («частичный», Model.Data1 / 2.WithPrefix («данные1»))

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) %>

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

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

...