Convalida MVC ASP.NET in visualizzazione parziale e ritorno alla visualizzazione padre

Il mio background

Sto lavorando al primo progetto serio utilizzando ASP.NET MVC 4. Sto lavorando allo sviluppo web dai tempi classici di ASP e ho avuto una buona presa su Webforms. MVC è molto eccitante e sto facendo buoni progressi. Ma ora sono in una situazione in cui ho bisogno di aiuto su questo forum.

Interrogare lo sfondo

Ho una vista genitore e al suo interno c’è una vista parziale. La vista parziale contiene un modulo e un pulsante di invio. La vista parziale ha il proprio modello di vista locale e quel modello di vista è una delle proprietà del modello di vista Parent.

Nel caso in cui le convalide sulle viste parziali falliscano, voglio, mostrare la vista genitore così com’è e evidenziare i campi non validi nella vista parziale.

Il codice non si sta rompendo da nessuna parte, ma quando c’è un errore di validazione, in qualche modo, non sto trovando il modo giusto per mostrare la vista genitore con il modello inizializzato passato ad esso. E, naturalmente, per evidenziare gli errori nella vista parziale.

Qualsiasi aiuto sarebbe apprezzato. Grazie.

Il codice ha il seguente aspetto:

Visualizza modelli:

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; } } 

controllore

 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); } } 

Parent View

 @model ParentViewModel @{ Layout = null; }    Index   
@Model.TitleId, @Model.Name
@Html.Partial("_child", Model.Child)

Vista parziale (_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)  } 

Devi mostrare la vista genitore non quella del bambino, quindi l’azione dovrebbe essere simile a:

 [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 ); }