2009-08-14 114 views
5

的兩個列表我有一個看法強類型,以項目類。在我的控制器中,我需要發送兩個不同的列表。有沒有更容易的方法來做到這一點,而不是創建一個具有兩個List的新類。Asp.Net MVC - 強類型查看同類型

什麼我最終要做的是對我的主頁10個項目按日期排序,以及10項依熱門程度排序。

我做了什麼

其實我去與這兩個答案的組合。我強烈地將我的視圖鍵入到用兩個列表創建的新類中。然後我強烈地將兩個部分視圖鍵入到每個列表中。可能看起來過度殺傷力,但我喜歡它的結果。

回答

10

「創建具有兩個列表一個新的類」是要走的路。它被稱爲視圖模型,一旦你擁抱它,強類型視圖的力量就真正打開了。它可以是這個簡單:

public class IndexViewModel 
{ 
    public List<Item> Newest { get; set; } 
    public List<Item> Popular { get; set; } 
} 
3

這就是約翰建議,或不含強類型的視圖,並將它們添加到的ViewData:

ViewData["Newest"] = Newest; 
ViewData["Popular"] = Popular 

另一種選擇是強類型的局部視圖。

1

您應該既包括列出專門用於視圖的模式。

通常在我已經完成的小MVC中,我爲每個視圖都創建了一個模型,即使它們只傳遞了數據或業務層提供的相同數據,以保持兩個部分之間的分隔非常嚴格。這種設置稍微有點多,在很多簡單的情況下都不需要,但它確實使我的觀點更清晰。

4

一般有兩種哲學這一點。首先是採取John Sheehan的方法。您可以使用這兩個列表創建自定義視圖模型,並將其傳遞給您的強類型視圖。

二是要考慮名單「輔助」數據,並把他們的ViewData像jeef3說。但是,當您呈現列表時,您使用強類型部分。由於我的意思是在你的主視圖中,你可以調用RenderPartial(...),但是傳遞你使用的視圖數據鍵。

而且你的部分看起來像:

<%@ ViewUserControl Inherits="System.Web.Mvc.ViewUserControl<List<Item>>" %> 
... 

這給你強類型從內您的部分訪問該視圖的數據。