Más de un Http.RenderAction () en una sola Vista
-
05-07-2019 - |
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
- Tiene una vista con múltiples vistas parciales mostradas usando
<form>
ayudante. - Al menos dos vistas parciales representan un
Html.BeginForm()
probablemente usandoform
esa devolución a la vista original. - La devolución de datos no se realiza a través de una llamada Ajax
- 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.
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.