2013-04-26 65 views
1

我正在使用MVC-4應用程序。我有2個作用在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 }); 
} 

我有一個父視圖和部分子視圖。子視圖在父視圖內呈現(子視圖包含用於爲父項創建新子項的表單)。當用戶添加新的孩子時,我們將孩子數據發送給孩子控制器的創建動作,並在成功保存後,我們將用戶返回給他/她添加孩子的同一父母。出於這個原因,我們將用戶重定向到父控制器的詳細操作。如果發生任何驗證錯誤,也會重定向到父控制器的詳細操作,但是這次我們將子對象保存在TempData中以保持模型狀態錯誤。

我的父母細節的看法是:

..... 
...... 

@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視圖中?

回答

3
TempData["Child"] = child; 

您沒有存儲完整的模型狀態(即驗證錯誤信息)。
您只能存儲您的Child對象的POST值。

從Kazi Manzur Ra​​shid的博客文章中閱讀POST REDIRECT GET pattern
它會輕鬆解決您的問題。

相關問題