2012-06-23 104 views
1

假設我有一個parent.cshtml視圖和一個parentModel,以及一個child.cshtml視圖和一個childModel。 這個孩子的動作是[ChildActionOnly],呈現在parent.cshtml:@Html.Action("ChildAction")。現在MVC父級和子級嵌套視圖返回模型

,在控制器/ ParentAction

public ActionResult ParentAction() {return View();} 
[HttpPost] 
public ActionResult ParentAction(ParentModel parentmodel) { 
    if(!ModelState.IsValid) { 
     ... 
     ModelState.AddModelError("", "parent view has an error"); 
    } 
    return View(parentmodel); // pass the ball back to user 
} 

在控制器/ ChildAction

[ChildActionOnly] 
public ActionResult ChildAction() {return View();} 
[HttpPost] 
public ActionResult ChildAction(ChildModel childmodel) { 
    if(!ModelState.IsValid) { 
     ... 
     ModelState.AddModelError("", "child view has an error"); 
    } 
    //??? return ParentView(parentmodel, childmodel) ??? how do i do this??? 
} 

在孩子的動作,我怎麼回ParentView(也呈現ChildView),並保留他們的模型中的數據?

編輯:-----

我的觀點是如何不這樣做。來自子動作的return View(childmodel);不會讓我們看到我們想看到的內容,因爲它只會給我們提供僅包含子視圖的「部分」頁面,父項部分缺失。 RedirectToAction("ParentAction");會再次給我們充分的看法,但它會失去模型。不知道如何處理嵌套視圖中的返回模型。那就是我卡住的地方。

+0

嘗試將您的childModel作爲您的parentModel的子項。將childModel傳遞給子控制器,然後在父控制器內忽略它。 –

+0

@Aleksey:child.cshtml中有一個Form和一個Submit Button來發布有關childModel的信息。 [HttpPost] public ActionResult ChildAction(ChildModel childmodel){...所以,我沒有看到你的觀點如何ParentModel環繞ChildModel?你可以展示代碼示例嗎?也許正如themarcuz所說,每個人都處理自己的模型? – Tom

回答

1

首先,你必須創建一個包裝ParentModelChildModel別人把ChildModel作爲ParentModel的屬性的通用模型。在這種情況下,我建議您使用Html.RenderPartial,而不是調用子操作並呈現子視圖。

咱們說ParentModel包裹ChildModel然後從ParentView.cshtml你可以通過渲染the ChildView.cshtml

@Html.Partial("ChildView", Model.ChildModel); 

現在從孩子的行動後,你必須建立ParentModel並返回ParentView

[HttpPost] 
public ActionResult ChildAction(ChildModel childmodel) { 
    if(!ModelState.IsValid) 
    { 
     ... 
     ModelState.AddModelError("", "child view has an error"); 
    } 

    ParentModel model = .. build the model from querying database. 

    return View("ParentView", model); 
} 
+0

看起來在mvc中有一個'customControl'並不像asp.net web表單那樣簡單。這個返回視圖/ partialview結構相當平坦,並且更好地使用ajax更新dom對象。 – Tom

1

只是你沒有。爲什麼要在子動作中返回父模型?每一個動作會處理自己的模式

+0

我知道我們不這樣做。但我不能把它當作答案。我的觀點是如何不這樣做。返回View(childmodel);從孩子的行爲不會得到我們想看到的,因爲它只會給我們一個只有子視圖的「部分」頁面,父母的一部分不見了。 RedirectToAction( 「ParentAction」);會再次給我們充分的看法,但它會失去模型。不知道如何處理嵌套視圖中的返回模型。那就是我卡住的地方。 – Tom