Pregunta

Como todos sabemos, RenderAction() forma parte de:

  • Futuros Asp.net MVC 1 o
  • Asp.net MVC 2 Beta 2

y nos permite representar el resultado de la acción dentro de otra vista o vista parcial.

Descripción

  1. Tiene una vista con múltiples vistas parciales mostradas usando <form> ayudante.
  2. Al menos dos vistas parciales representan un Html.BeginForm() probablemente usando form esa devolución a la vista original.
  3. La devolución de datos no se realiza a través de una llamada Ajax
  4. Los datos de devolución se validan en el formulario POST.

Problema

Cuando uno de los formularios se vuelve a publicar, el otro se muestra como inválido .

¿Alguien ha usado este patrón y lo ha resuelto? De alguna manera deberíamos saber qué HttpVerb.Get realizó la devolución de datos y solo esa debería validar sus datos POST. Otros deben ignorar la validación o realizar un procesamiento de acción <=> regular.

¿Fue útil?

Solución

Tenga un campo oculto en el formulario para indicar cuál. O bien, haga que se pase un prefijo al parcial y se agregue a cada elemento del formulario.

Acerca de los prefijos. La primera forma es tener dos propiedades, llamando a Html.RenderPartial (& Quot; parcial & Quot ;, Model.Data1 / 2.WithPrefix (& Quot; data1 & Quot;)).

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 {}
}

La segunda forma es la misma pero usa dos parámetros de acción.

public ActionResult HandlePost(FormModel data1, FormModel data2)
{
   if (data1 != null) {} else {}
}

En la vista parcial que haces

<%= Html.TextBox(Model.Prefix + ".FormModelField", Model.FormModelField) %>

es decir, establece el nombre del campo con el prefijo pasado en el modelo.

Por supuesto, puede variar esto en detalles.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top