【问题标题】:MVC3 WebGrid - Creating Columns Dynamically (foreach?)MVC3 WebGrid - 动态创建列(foreach?)
【发布时间】:2012-01-02 19:15:31
【问题描述】:

我想创建一个包含基于集合(例如 List)的列的 WebGrid。像这样的东西(显然不起作用):

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

有什么聪明的想法吗?

【问题讨论】:

    标签: asp.net-mvc-3 webgrid


    【解决方案1】:

    你可以像下面这样 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
                         )
    

    【讨论】:

    • 我设法让代码以前使用 foreach 循环工作,但需要在添加到列集合之前将每一列分配给一个局部变量。局部变量是解决 lambda“访问修改后的曝光”问题所必需的。您的解决方案更简洁,谢谢。
    【解决方案2】:

    试试这个:

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

    【讨论】:

      【解决方案3】:

      你可以使用辅助方法

      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)))
      

      【讨论】:

        猜你喜欢
        • 2012-01-12
        • 2012-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-09
        • 2015-07-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多