2010-04-30 124 views
0

我有部分視圖問題。 我正在開發一個在asp.net mvc中的博客,我會在我的主頁中製作一個類別列表,最後一個帖子,最後一個評論。 我認爲最好的解決方案是使用強類型局部視圖,並在每個局部視圖中傳遞必要的模型。強類型局部視圖問題

我的問題是,在查看模型。在任何視圖(連接到母版的的ContentPlaceHolder)與在局部視圖模型衝突進入,我得到這樣一個錯誤:

The model item passed into the dictionary is of type 'System.Collections.Generic.List`1[Blog.Models.Articoli]' but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[Blog.Models.Categorie]'. 

我發現在網上一個骯髒的解決方案,包括傳遞任何視圖的模型,一些viewdata,每個模型要在部分視圖中傳遞。但是這個解決方案不尊重DRY原則。因爲你必須爲每個動作重複這個代碼!

所以,我的問題是:我可以創建一個包含部分視圖模型的模型嗎? 如果,是的,那樣?

它存在另一種解決方案更簡單嗎?

感謝您的幫助

+0

我以前碰到過這個。請發佈視圖的標題和RenderPartialView代碼 – hunter 2010-04-30 15:44:28

回答

5

視圖模型模式如何?

我創建傳遞給我的意見,而不是任何對象我通常會使用

public class MyCreateUserView 
{ 
    public User CreatingUser { get; set; } 
    public MyPartialViewObject Blah { get; set; } 
} 

您認爲寫的包裝類:

public ActionResult CreateUser() 
{ 
    MyCreateUserView createUser = new MyCreateUserView() 
    { 
     CreatingUser = GetUserFromSomewhere(), 
     Blah = GetPartialViewObject(); 
    } 

    return View(createUser); 
} 

然後網頁標題看起來像這樣:

<%@ Page Language="C#" Inherits="ViewPage<MyCreateUserView>" %> 

當你渲染你的部分寫作:

<% Html.RenderPartial("../MyPartialViewObject ", Model.Blah); %> 
1

而不是用你描述的模式(這通常是一個很好的模式)來解決這個問題,我通過調用RenderAction來解決這個問題,並讓它返回一個局部視圖。這樣的代碼是在一個地方,因爲每個調用每個視圖不必擔心編組所有你需要的數據。如果你想看看如何使用它的簡短討論,我會在這裏檢查Haack的博客:http://haacked.com/archive/2009/11/18/aspnetmvc2-render-action.aspx。你也可以在這裏查看關於這個其他帖子的討論:ASP.NET MVC Master Page Data