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

  1. Hai una vista con più viste parziali visualizzate usando <form> helper.
  2. Almeno due viste parziali rendono un Html.BeginForm() probabilmente usando form quel postback alla vista originale.
  3. Il postback non viene eseguito tramite la chiamata Ajax
  4. 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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top