2013-09-05 14 views
14

Mein HintergrundASP.NET MVC Validierung in Teilansicht und zurück zur übergeordneten Ansicht

ich auf erstem ernsthaftes Projekt arbeitete mit ASP.NET MVC 4. Ich seit klassischen ASP Tagen auf Web-Entwicklung tätig bin und habe auf Webforms gut erhalten. MVC ist sehr aufregend und macht gute Fortschritte. Aber jetzt bin ich in einer Situation, wo ich Hilfe in diesem Forum brauche.

Abfrage Hintergrund

Ich habe einen Blick Eltern und seinem Inneren gibt es eine Teilansicht. Teilansicht enthält eine Formular- und Übergabeschaltfläche. Die Teilansicht hat ihr eigenes Modell für die lokale Ansicht, und dieses Ansichtsmodell ist eine der Eigenschaften des übergeordneten Ansichtsmodells.

Wenn die Validierungen bei Teilansichten fehlschlagen, möchte ich die übergeordnete Ansicht anzeigen und ungültige Felder in der Teilansicht hervorheben.

Der Code bricht nirgendwo, aber wenn es einen Validierungsfehler gibt, irgendwie, finde ich nicht richtigen Weg, um die Elternansicht mit initialisiertem Modell zu zeigen. Und natürlich, um die Fehler in der Teilansicht hervorzuheben.

Jede Hilfe wäre willkommen. Vielen Dank.

-Code sieht wie folgt aus:

Ansicht Modelle:

public class ParentViewModel 
{ 
    public int TitleId { get; set; } 
    public string Name { get; set; } 
    public ChildViewModel Child { get; set; } 
} 

public class ChildViewModel 
{ 
    [Required] 
    public decimal Rating { get; set; }   

    [Required] 
    [StringLength(500)] 
    [Display(Description = "Review")] 
    [RegularExpression("([a-zA-Z0-9 .&'-]+)", ErrorMessage = "Enter only alphabets and numbers of First Name")] 
    public string ReviewText { get; set; } 
} 

-Controller

public class TestController : Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new ParentViewModel() 
         { 
          TitleId = 1,Name = "Parent name", 
          Child = new ChildViewModel() 
             { 
              Rating = 2.5M, ReviewText = "Its a must watch!" 
             } 
         }; 
     return View("Index", model); 
    } 

    [HttpPost] 
    public ActionResult SubmitReview(ChildViewModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      return View("_child", model); 
     } 

     ModelState.AddModelError("", "Some Error."); 
     return View("_child", model); 
    } 
} 

geordneten Ansicht

Teilansicht (_child.cshtml)

@model ChildViewModel 
@using (Html.BeginForm("SubmitReview", "Test")) 
{ 
    @Html.ValidationSummary(true) 

    @Html.TextBoxFor(m => m.Rating)  @Html.ValidationMessageFor(m => m.Rating) 
    @Html.TextBoxFor(m => m.ReviewText) @Html.ValidationMessageFor(m => m.ReviewText) 
    <input type="submit" value="Log in" /> 
} 

Antwort

8

Sie benötigen eine der übergeordneten Ansicht, das Kind nicht zeigen, so dass die Aktion sollte wie folgt aussehen:

[HttpPost] 
    public ActionResult SubmitReview(ChildViewModel model) 
    { 
      var parentViewModel = write init code here; 
      parentViewModel.ChildModel = model; 

     if (ModelState.IsValid) 
     { 

      return View("Index", parentViewModel); 
     } 

     ModelState.AddModelError("", "Some Error."); 
     return View("Index", parentViewModel); 
    } 
+0

, die absolut Sinn macht . Gibt es eine Möglichkeit, das Elternmodell beim Senden nicht erneut zu initialisieren? Momentan versuche ich, das übergeordnete Modell an SubmitReview zu übergeben, aber das übergeordnete Modell merkt sich die Werte nicht. Aber danke für Ihren Vorschlag, ich werde das umsetzen, denn es wird funktionieren. –

+0

auf submit, wie soll ich den Schlüssel des Elterns halten, um es zu initialisieren? Ich hoffe, ich mache einen Sinn ..... –

+0

Sie können für Formular in die übergeordnete Ansicht verschieben (das ist eine gute Praxis), dann fügen Sie das übergeordnete Modell in ausgeblendete Felder, so wenn Sie auf Senden klicken, erhalten Sie die vollständigen Daten in der Steuerung –

Verwandte Themen