是否可以使用通用Razor视图来使用通用模型?

时间:2013-06-15 07:52:50

标签: asp.net-mvc generics razor

我正在使用MVC.Net开发列表生成器。

我创建了ColumnInfo<T>Report<T>类,如下所示:

public class ColumnInfo<T>
{
       public string Title{get;set;}
       public Func<T,object> Projector{get;set;}
}

public class Report<T>
{
   public IList<ColumnInfo<T>> Header{get;set;}
   public IQueryable<T> Result{get;set;} 
    ......
}

我想要做的是通过在局部视图中枚举Report来创建Header的标题和正文。 问题是:如何将我的通用Report<T>引入Razor视图? 这就是我的想法:

@foreach(var row in Model.Result)
          {    
<tr>
    @foreach(var col in Model.Header)
    {

             <td>@col.Projector(row)</td>

    }
    </tr>
}

1 个答案:

答案 0 :(得分:0)

可能的解决方案是在视图中使用动态作为通用类型:

@model Models.Report<dynamic>

您的控制器还需要将类型设置为动态:

public ActionResult Report()
{
    var viewModel = new Report<dynamic>();
    return View(viewModel);
}

不确定此解决方案是否适合您的问题,但我注意到无法设置:@model Models.Report<T>