2013-04-26 5 views
1

Я работаю над приложением MVC-4. У меня есть два действия в 2 разного контроллере, как:Почему ошибки модели не отображаются в частичном представлении в MVC?

Родителя

Public ActionResult Detail(int id) 
{ 
    var p = parent.GetById(id); 
    ViewBag.Child = TempData["Child"]; 
    return View(p); 
} 

Детского

Public ActionResult Create(Child child) 
{ 
    if(ModelState.IsValid) 
    { 
    //code save to db 
    } 
    TempData["Child"] = child; 
    return RedirectToAction("Detail", "Parent", new { id = child.ParentId }); 
} 

У меня есть родительский вид и частичный вид на ребенок. Вид Child отображается внутри родительского представления (дочерний вид содержит форму для создания нового дочернего элемента для родителя). Когда пользователь добавляет нового ребенка, мы отправляем дочерние данные в действие для создания дочернего контроллера, и после успешного сохранения мы возвращаем пользователя к тому же самому родителю, откуда он добавил ребенка. По этой причине мы перенаправляем пользователя на подробное действие родительского контроллера. И если возникает какая-либо ошибка проверки, а также перенаправляется на подробное действие родительского контроллера, но на этот раз мы сохраняем дочерний объект внутри TempData, чтобы сохранить ошибку modelstate.

Мой взгляд родительская деталь:

..... 
...... 

@if (ViewBag.Child == null) 
{ 
    Html.RenderPartial("_AddChildPartial", new ViewDataDictionary { { "parentId", Model.Id } }); 
} 
else 
{ 
    Html.RenderPartial("_AddChildPartial", ViewBag.Child as xxxx.Models.Child); 
} 

Здесь я первый проверить, содержит ли viewbag дочерний объект, если да, чем мы проходим, что ребенок obejct к _AddChildPartial view.To показать ошибку модели и данные, пользователь заполняется в форме. Данные отображаются успешно, но ошибка модели не отображается.

Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно здесь, почему ошибки модели теперь отображаются в _AddChildPartial View?

ответ

3
TempData["Child"] = child; 

Вы не сохраняете полное состояние модели (то есть информацию об ошибке проверки).
Вы сохраняете только значения POST объекта Child.

Прочитать POST REDIRECT GET pattern из сообщения Кази Манзура Рашида.
Это поможет решить вашу проблему легко.

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