Più di un Http.RenderAction () in una singola vista
-
05-07-2019 - |
Domanda
Come tutti sappiamo RenderAction()
fa parte di:
- Asp.net MVC 1 Futures o
- Asp.net MVC 2 Beta 2
e ci consente di visualizzare il risultato dell'azione all'interno di un'altra vista o vista parziale.
Descrizione
- Hai una vista con più viste parziali visualizzate usando
<form>
helper. - Almeno due viste parziali rendono un
Html.BeginForm()
probabilmente usandoform
quel postback alla vista originale. - Il postback non viene eseguito tramite la chiamata Ajax
- I dati di postback sono convalidati sul modulo POST.
Problema
Quando uno dei moduli viene posticipato, l'altro viene visualizzato come non valido .
Qualcuno ha usato questo schema e risolto? Dovremmo in qualche modo sapere quale HttpVerb.Get
ha eseguito il postback e solo quello dovrebbe convalidare i suoi dati POST. Altri dovrebbero ignorare la convalida o eseguire regolarmente <=> elaborazione delle azioni.
Soluzione
Avere un campo nascosto nel modulo per indicare quale. In alternativa, fai passare un prefisso al parziale e accodato a ciascun elemento nel modulo.
Informazioni sui prefissi. Il primo modo è avere due proprietà, chiamando Html.RenderPartial (& Quot; partial & 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 {}
}
Il secondo modo è lo stesso ma usa due parametri di azione.
public ActionResult HandlePost(FormModel data1, FormModel data2)
{
if (data1 != null) {} else {}
}
Nella vista parziale lo fai
<%= Html.TextBox(Model.Prefix + ".FormModelField", Model.FormModelField) %>
ovvero, si imposta il nome del campo con il prefisso passato nel modello.
Ovviamente puoi variare questo nei dettagli.