如何在ASP.NET MVC4 razor视图中可视化动态类型列

时间:2013-12-31 23:55:45

标签: asp.net-mvc asp.net-mvc-4 razor webmatrix webgrid

Mono / .NET 4 MVC4视图viewmodel包含动态类型的行列表。 使用WebMatrix Query()方法从数据库返回此列表。 使用动态类型,因为在设计时不知道返回列的数量,用户可以选择不同的select语句。

public class HtmlReportViewModel {
  public IEnumerable<dynamic> Rows { get; set; }
  }

如何以原始格式向用户显示查询结果?

我尝试过Razor视图

<body><table>
  @foreach (var r in Model.Rows)
  {
  <tr> @r.ToString() </tr>
  }
</table>
</body>

但输出

WebMatrix.Data.DynamicRecord 
每行

。 如何在html表elemet或其他表格形式中显示行数据值? 它有一些帮助MVC4从这生成html元素? Applicaton也应该在Mono下运行,所以我不确定WebGrid可以用于此。不知道在Mono中是否可以使用WebGrid。

除了WebMatrix Query()之外,还可以使用ADO.NET DataReader来获取动态数据 如果这有帮助。

1 个答案:

答案 0 :(得分:1)

我不知道你的价值观,但也许这种扩展方法会有所帮助:

public static class MyHtmlExtensions
{
  public static string DisplayForDynamicModel(this HtmlHelper html, dynamic model)
    {
        Type t = model.GetType();

        var props = t.GetProperties();

        StringBuilder sb = new StringBuilder();
        foreach (var p in props)
        {
           string value =  p.GetValue(model).ToString();
           sb.AppendFormat("<tr>{0}</tr>", value);
        }

        return sb.ToString();
    }
}

你可以像这样使用它:

@foreach (var r in Model.Rows)
{
    @Html.DisplayForDynamicModel(r)
}