2010-08-16 46 views
6

與MVC2開始,用一個簡單的數據庫亂搞,只是使用索引視圖,顯示一個類似的項目:MVC2 - 基本問題,其中邏輯應該去

控制器

// 
    // GET: /Equipment/ 

    public ActionResult Index() 
    { 
     return View(database.Artists.ToList()); 
    } 

 <td> <%: item.ArtistID %> </td> 
     <td> <%: item.GenreID %> </td> 

等等等等

在我的例子,其PO:汽車在視圖中生成的代碼這個數據沒有被填滿,所以它可能是空的。現在,當我試圖加載視圖時,我將得到一個NullReferenceException。那麼這個代碼在哪裏呢?

我想你可以在視圖中有if語句,但肯定這不是邏輯應該去的地方。我應該創建一個只返回空字符串,如果值爲空的HTML幫助器?

編輯:

感謝您的幫助。

我有另一個查詢。如果說我正在開發一個索引瀏覽類型頁面,該怎麼辦?此刻即時顯示在一個頁面上的所有項目,但有像2K項目。是否有教程或如何分解它的例子?我想我的索引瀏覽控制器可能只是從瀏覽器中取整數值,然後我只是說接下來顯示100

回答

3

當您返回藝術家列表時,您需要檢查null並返回藝術家的新列表。

這是最好的完成,國際海事組織,通過返回所謂的ViewModel。

Class MyFormViewModel 
    List<Artist> artists {get; set;} 

然後在你的控制器

MyFormViewModel fvm = new MyFormViewModel(); 

fvm.artists = database.Artists.ToList(); 
if (fvm.artists == null) fvm.artists = new List<Artist>(); 
return View(fvm) 

那麼你認爲從MyFormViewModel

繼承然後考慮在得到藝術家和組對象到另一個層cntroller分解出邏輯

編輯

的原因FormViewModel是因爲如果要添加其他東西,返回到視圖中,您只需擴展模型,使它很容易添加更多的局部視圖等

EDIT 2

如果您有一個部分viwe稱爲藝術家列表,其中採取藝術家的完整列表。然後,它簡單地通過藝術家列表進行演示,並呈現另一個PV電話,稱藝術家被授予藝術家的單個實例。

然後,您可以在藝術家局部視圖中爲null進行簡單檢查。

或者您可以在ArtistList局部視圖中檢查空記錄並渲染另一個名爲「NullArtist」的PV。

+0

對不起,我的意思是一個記錄中的一個字段可能爲空。但是你的回答是有道理的,所以我只需更改構建非空列表的邏輯並將其設置爲視圖模型的數據 – baron 2010-08-16 04:28:55

2

一種選擇是顯示當沒有找到藝術家時顯示的不同視圖,例如, 「找不到藝術家」。在這種情況下,更改將在控制器中進行。

另一種選擇是修改視圖,使其包含一些代碼,以呈現消息:如果列表爲空或呈現列表,則不會找到藝術家。

如果以後需要,您可以隨時使用ViewModel更復雜。在這個階段有更簡單的解決方案。