Frage

Wie wir alle wissen RenderAction() ist Teil von:

  • Asp.net MVC 1 Futures oder
  • Asp.net MVC 2 Beta 2

und ermöglicht es uns, Aktion Ergebnis in einer anderen Ansicht oder Teilansicht zu machen.

Beschreibung

  1. Sie haben eine Ansicht mit mehreren Teilansichten angezeigt RenderAction() Helfer mit.
  2. Mindestens zwei Teilansichten machen einen <form> wahrscheinlich durch Html.BeginForm() verwenden, die ursprüngliche Ansicht Postback.
  3. Postback nicht über Ajax-Aufruf ausgeführt
  4. Postback-Daten auf Formular POST validiert.

Problem

Wenn eine der Formen wird der andere macht als ungültig geschrieben zurück.

Hat jemand dieses Muster verwendet, und es gelöst? Wir sollten irgendwie wissen, welche durchgeführt Postbacks form und nur, dass man sollte seine POST-Daten validieren. Andere sollten entweder Validierung ignorieren oder regelmäßige HttpVerb.Get Aktion Verarbeitung durchführen.

War es hilfreich?

Lösung

Haben Sie ein verstecktes Feld in der Form, um anzuzeigen, welche. Oder ein Präfix zu dem Teil bestanden und auf jedes Element in der Form angehängt.

Über Präfixe. Erste Weg ist, zwei Eigenschaften zu haben, rufen Html.RenderPartial ( "teilweise", 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 {}
}

Zweite Möglichkeit ist die gleiche, aber zwei Aktionsparameter verwenden.

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

In der Teilansicht Sie tun

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

das heißt, Sie Feldnamen mit dem Präfix im Modell übergibt gesetzt.

Natürlich können Sie diese in Details abweichen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top