【问题标题】:How can I move some of the Kendo MVC grid column definitions inside an helper method如何在辅助方法中移动一些 Kendo MVC 网格列定义
【发布时间】:2018-04-18 17:57:20
【问题描述】:

我有一个 Kendo MVC Grid,它变得非常庞大和复杂。我想知道如何在视图的辅助方法中移动一些列定义。我无法为下面的辅助方法找出正确的语法。

@(Html.Kendo()
.Grid<MyModel>()
.Name("documents")
.Editable(e => e.Mode(GridEditMode.InLine))
.AutoBind(false)
.DataSource(b => b.Ajax()
    .Model(m =>
    {
        m.Id(o => o.Id);
    })
    .Read(a => a.Action("documents", "document")
)
.Columns(c =>
{

    c.Bound(m => m.Name)
        .Title(Resources.Document.Name);
    c.Bound(m => m.Description)
        .Title(Resources.Document.Description);

    ...

    if(ViewBag.CanViewEquipmentColumns) {
        CreateEquipmentColumns(c); // The helper method
    }

    ...

    c.Bound(m => m.Size)
        .Title(Resources.Document.Size);
})
)

// Here is the code that I can't get to work. How can I define this custom helper method here using the Razor view engine and Kendo Grid fluent API?
@{
    Kendo.Mvc.UI.Fluent.GridBoundColumnBuilder<MyModel> CreateEquipmentColumns(Kendo.Mvc.UI.Fluent.GridColumnFactory<MyModel> c)
    {
        c.Bound(m => m.Equipment)
            .Title(Resources.MaintenanceBooklet.Equipment);
        c.Bound(m => m.StartDate)
            .Title(Resources.MaintenanceBooklet.StartDate);
        c.Bound(m => m.EndDate)
            .Title(Resources.MaintenanceBooklet.EndDate);
    }
}

【问题讨论】:

    标签: asp.net-mvc razor kendo-ui kendo-grid kendo-asp.net-mvc


    【解决方案1】:

    我不确定视图中的方法。您应该制作扩展方法,如下所示:

    public static void CreateEquipmentColumns<MyModel>(this GridColumnFactory<MyModel> factory, WebViewPage<YourViewModel> webViewPage)
    {
          factory.Bound(m => m.Equipment)
                .Title(Resources.MaintenanceBooklet.Equipment);
    }
    

    你可以在视图中使用它:

    Columns(c =>
    {
    
        c.Bound(m => m.Name)
            .Title(Resources.Document.Name);
        c.Bound(m => m.Description)
            .Title(Resources.Document.Description);
    
        ...
    
        if(ViewBag.CanViewEquipmentColumns) {
            c.CreateEquipmentColumns(this); // The helper method
        }
    
        ...
    
        c.Bound(m => m.Size)
            .Title(Resources.Document.Size);
    })
    

    【讨论】:

      【解决方案2】:

      您可以像这样添加扩展方法,并且可以避免跨解决方案重复代码。

          public static class KendoExtensions
          {
           public static GridBuilder<T> AddDefaultOptions<T>(this GridBuilder<T> builder) where T : mymodelClass // Your class here
                  {
                      return builder
                                  .Columns(c =>
                                  {
                                      c.Bound(m => m.Equipment).Title(Resources.MaintenanceBooklet.Equipment);
                                      c.Bound(m => m.StartDate).Title(Resources.MaintenanceBooklet.StartDate);
                                      c.Bound(m => m.EndDate).Title(Resources.MaintenanceBooklet.EndDate);
                                  });
      
                  }
      
          }
      

      查看

      @(Html.Kendo().Grid(Model.Mydata)
                        .Name("mygrid")
                        .AddDefaultOptions()
      
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-19
        • 2015-11-12
        • 1970-01-01
        相关资源
        最近更新 更多