动态地将列添加到ASP.NET MVC视图中的表

Sar*_*pps 6 c# asp.net asp.net-mvc dynamic

我将IList返回到我的用户数据模型.我希望我的最终用户能够选择他们想要查看的列.

我知道我可以用一个巨大的"如果声明"来做到这一点但是,我知道必须有一个更好的方法.

我创建了一个带有列名的Enum.我觉得如果我可以使用IListItem.EnumName我将被设置.但是,我不太清楚如何做到这一点.

建议?

Sim*_*ele 5

我通过创建一个IColumn接口,然后是一堆可以正确显示我的模型的不同方面的列类来处理这个问题.然后视图使用简单的for循环呈现每个列.例如:

public interface IColumn
{
    string Title { get; }
    string Render(MyModelObject obj);
}

public class NameColumn : IColumn
{
    public string Title { get { return "Name"; } }

    public string Render(MyModelObject obj)
    {
        return obj.Name;
    }
}
Run Code Online (Sandbox Code Playgroud)

在您的视图中,您可以执行以下操作:

<tr>
<% foreach (var column in Model.UserColumns) { %>
<th><%= column.Title %></th>
<% } %>
</tr>

<% foreach (var item in Model.Items) { %>
<tr>
    <% foreach (var column in Model.UserColumns) { %>
    <td><%: column.Render(item) %></td>
    <% } %>
</tr>
<% } %>
Run Code Online (Sandbox Code Playgroud)

这对我来说效果很好!