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