Mais de um Http.RenderAction () em uma única exibição
-
05-07-2019 - |
Pergunta
Como todos nós RenderAction()
saber ou é parte de:
- Asp.net MVC 1 Futures ou
- Asp.net MVC 2 Beta 2
e permite-nos prestar resultado de ação dentro de outra visão ou visão parcial.
Descrição
- Você tem uma visão com múltiplas visões parciais exibido usando
RenderAction()
ajudante. - Pelo menos duas visões parciais tornar uma
<form>
provavelmente usandoHtml.BeginForm()
que postback para exibição original. - Postback não é realizada através de chamada Ajax dados
- Postback é validada mediante formulário POST.
Problema
Quando uma das formas é postado de volta o outro processa como inválido .
Alguém já usou esse padrão e resolveu isso? Devemos de alguma forma saber qual form
realizada postback e só que se deve validar seus dados POST. Outros devem ignorar validação ou executar o processamento de ação HttpVerb.Get
regular.
Solução
Tenha um campo oculto no formulário para indicar qual. Ou, tem um prefixo passado para a parcial e anexado a cada elemento na forma.
Sobre prefixos. Primeira maneira é ter duas propriedades, chamando Html.RenderPartial ( "parcial", 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 {}
}
A segunda maneira é o mesmo, mas o uso de dois parâmetros de ação.
public ActionResult HandlePost(FormModel data1, FormModel data2)
{
if (data1 != null) {} else {}
}
Na vista parcial fizer
<%= Html.TextBox(Model.Prefix + ".FormModelField", Model.FormModelField) %>
ou seja, você conjunto nome de campo com o prefixo passou no modelo.
Claro que você pode variar isso em detalhes.