Подтвердить что ты не робот

Проверка 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" />
}
4b9b3361

Ответ 1

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

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