2013-09-05 3 views
14

Мой фонASP.NET MVC проверки в частичном и возврата к просмотру Родитель

Я работаю над первым серьезным проектом с использованием ASP.NET MVC 4. Я работаю на веб-разработки, так как классические дни ASP и имеют получил хорошее удержание на Webforms. MVC очень увлекательный, и я делаю хороший прогресс. Но теперь я в ситуации, когда мне нужна помощь на этом форуме.

Запрос фон

У меня есть родительское представление и внутри него есть частичный вид. Частичный вид содержит кнопку формы и отправки. У частичного представления есть собственная модель локального представления, и эта модель просмотра является одним из свойств модели представления родителя.

В случае, если проверки на частичные представления не удались, я хочу показать родительское представление как есть и выделить недопустимые поля в частичном представлении.

Код не прерывается нигде, но когда есть ошибка проверки, каким-то образом я не нахожу правильный способ показать родительское представление с инициализированной моделью, переданной ему. И, конечно, выделить ошибки в частичном представлении.

Любая помощь будет оценена по достоинству. Благодарю.

код выглядит следующим:

Просмотр моделей:

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

Контроллер

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

Родитель Посмотреть

@model ParentViewModel 
@{ 
    Layout = null; 
} 
<!DOCTYPE html> 
<html> 
<head> 
    <title>Index</title> 
</head> 
<body> 
    <div> 
     @Model.TitleId, @Model.Name   
    </div> 
    <div> 
     @Html.Partial("_child", Model.Child) 
    </div> 
</body> 
</html> 

Частичный вид (_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" /> 
} 

ответ

8

Вы должны показать родительское представление не ребенок один, так что действие должно выглядеть следующим образом:

[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

Это имеет смысл , Но есть ли способ избежать повторной инициализации родительской модели при отправке? Сейчас я пытаюсь передать родительскую модель в SubmitReview, но родительская модель не запоминает значения. Но спасибо за ваше предложение, я буду реализовывать это, потому что он будет работать. –

+0

на submit, как я должен удержать ключ родителя для его инициализации? Надеюсь, у меня есть смысл ..... –

+0

Вы можете перемещать форму в родительский вид (это на самом деле хорошая практика), а затем добавить родительскую модель в скрытые поля, поэтому, когда вы нажмете кнопку «Отправить», вы получите полные данные в контроллере –

Смежные вопросы