0

當我以組的形式顯示數據時,我總是回到程序性編程,並且我確信必須有更好的方法。你的想法?組中的MVC Razor顯示數據

//Example: Sales by Region 

@{ 
    string _Region = ""; 
    bool _FirstRecordFlag = false; 
    } 


    @foreach(DataRow Row in dataset.Tables["MonthlySales"].Rows) 
    { 
     if(_Region != Row["Region"].ToString()) 
     { 
      if(_FirstRecordFlag) 
      { 
       @:</fieldset> 
       _FirstRecordFlag = true; 
      } 
      @:<fieldset> 
      @: <legend>@Row["Region"]</legend> 
      _Region = Row["Region"].ToString()) 
     } 
      <div> 
       Display Sales data here... 
      </div> 
    } 
} 

回答

2

我保持 組顯示數據時回落到程序編程,我相信一定有更好的辦法

當然,有一個更好的辦法。由於您的問題標有mvc,因此您應該使用視圖模型並在控制器中執行所有此類分組以填充將傳遞給視圖的視圖模型。 Razor視圖應該儘可能愚蠢 - 它只會顯示視圖模型中的信息。在Razor視圖中使用DataSets和DataRows完全是解決此問題的錯誤方法。你的觀點會像一些可怕的意大利麪代碼。

因此,請考慮如何在視圖上呈現信息。基於這種思維,你將能夠提出一個反映這種結構的視圖模型。然後,您在控制器操作中所要做的就是將您的域模型(您的案例中的數據集)映射到將傳遞給視圖的相應視圖模型。

如果這不是一個ASP.NET MVC應用程序,但一個WebMatrix的網站,你只需要查看的一部分,你還是應該定義視圖模式,讓你的剃刀頁代碼隱藏部分映射域模型轉換爲視圖模型,然後由Razor模板的視圖部分進行操作。

+0

我真的很喜歡你的答案。只是要問。關於ViewModel構建器的問題?所以你可以保持控制器更薄? – GibboK 2012-11-05 11:45:42

+0

@GibboK,是的,我個人使用Automapper。 – 2012-11-05 11:54:44