2011-11-21 70 views
2

我想创建一个基于集合(例如List)的列的WebGrid。像这样的东西(这显然不起作用):MVC3 WebGrid - 动态创建列(foreach?)

@grid.GetHtml(
    columns: grid.Columns(
    @foreach (var column in Model.ListOfColumns) { 
     grid.Column(column.Name, column.Title); 
    } 
) 
)   

任何聪明的想法?

回答

8

你可以ViewBag像下面。

控制器:

 List<WebGridColumn> columns = new List<WebGridColumn>(); 
     columns.Add(new WebGridColumn() { ColumnName = "Id", Header = "Id" }); 
     columns.Add(new WebGridColumn() { ColumnName = "Name", Header = "Name" }); 
     columns.Add(new WebGridColumn() { ColumnName = "Location", Header = "Location" }); 
     columns.Add(new WebGridColumn() { Format = (item) => { return new HtmlString(string.Format("<a href= {0}>View</a>", Url.Action("Edit", "Edit", new { Id = item.Id }))); } }); 
     ViewBag.Columns = columns; 

查看:

@grid.GetHtml(tableStyle: "ui-widget ui-widget-content", 
         headerStyle: "ui-widget-header", 
         columns: ViewBag.Columns 
        ) 
+0

我以前使用foreach循环设法让代码工作,但需要在添加到列集合之前将每列分配给局部变量。局部变量是解决lambda“访问修改曝光”问题所必需的。你的解决方案很整洁,谢谢。 – pfeds

4

试试这个:

@{ 
    List<WebGridColumn> cols = new List<WebGridColumn>(); 
    foreach(var column in Model.ListOfColumns) 
    { 
     cols.Add(grid.Column(column.Name, column.Title)); 
    } 
} 

@grid.GetHtml(
    columns: cols 
) 
0

你可以使用的辅助方法

public static class GridExtensions 
{ 
    public static WebGridColumn[] DynamicColumns(
     this HtmlHelper htmlHelper, 
     WebGrid grid 
    ) 
    { 
     var columns = new List<WebGridColumn>(); 

     columns.Add(grid.Column("Property1", "Header", style: "record")); 
     columns.Add(grid.Column("Property2", "Header", style: "record")); 
     columns.Add(grid.Column("Actions", format: (item) => { return new HtmlString(string.Format("<a target='_blank' href= {0}>Edit </a>", "/Edit/" + item.Id) + string.Format("<a target='_blank' href= {0}> Delete</a>", "/Delete/" + item.Id)); })); 
     return columns.ToArray(); 
    } 

用法:

@{ 
    var grid = new WebGrid(Model); 
} 
@grid.GetHtml(columns: grid.Columns(Html.DynamicColumns(grid)))