在 MVC 中执行 Kendo 网格时从模型中检索数据

Retrieving data from Model while doing a Kendo grid in MVC

这是模型代码:

namespace WEB02.Models
{
public class GridDatatable
{

    public DataTable Table { get; set; }
}
}

这是包含 kendo 网格的视图代码:

@using Kendo.Mvc.UI
@model WEB02.Models.GridDatatable
@{
    ViewBag.Title = "Index";
    }
   <h2>Index</h2>
   <div id="divGrid">

  @(Html.Kendo().Grid<dynamic>()
.Name("TTGrid")
.Columns(columns =>
{
    foreach (System.Data.DataColumn c in Model.Table.Columns)
    {
        columns.Bound(c.ColumnName).EditorTemplateName("String");
    }
  })
.Pageable(pageable => pageable.ButtonCount(10))
.Sortable(sortable => sortable
        .AllowUnsort(true)
        .SortMode(GridSortMode.MultipleColumn))

  .Editable(editable => editable.Enabled(true)
  .Mode(GridEditMode.InLine))

.Scrollable()
.DataSource(dataSource => dataSource
    .Ajax()
    .Events(events => events.Error("error_handler"))
    .Model(model =>
    {
        //Define the model
        foreach (System.Data.DataColumn column in Model.Table.Columns)
        {
            model.Field(column.ColumnName, column.DataType);
            model.Id("Id");
        }
    })
    .Read(read => read.Action("griddata", "Configuration"))

)

    .Filterable(ftb => ftb.Mode(GridFilterMode.Menu))
        .Pageable(pageable => pageable
        .Refresh(true)

        .PageSizes(new int[] { 10, 100, 1000, 10000, 100000, 1000000 })
        .ButtonCount(10)
    )
    .Resizable(resizing => resizing.Columns(true))
  )
</div>

控制器代码:

    namespace WEB02.Controllers
{
public class ConfigurationController : Controller
{
    //
    // GET: /Configuration/
    public ActionResult Index()
    {
        GridDatatable gridTable = new GridDatatable();
        gridTable.Table = new DataTable();
        gridTable.Table.Columns.Add("Name");
        return View("Index",gridTable);
    }

    public ActionResult _WorkflowPartial()
    {
        return PartialView();
    }

    public ActionResult griddata([DataSourceRequest] DataSourceRequest request)
    {
        GridDatatable gridTable = new GridDatatable();
        gridTable.Table = new DataTable();
        gridTable.Table.Columns.Add("Name", typeof(string));
        List<string> Griddetails;
        Griddetails = RxMUaClient.Browse("2", "127.0.0.1:48030", "Mls.Work.Triggers");
        gridTable.Table = ConvertListToDataTable(Griddetails);       
        if (request.Aggregates.Any())
        {
            request.Aggregates.Each(agg => agg.Aggregates.Each(a =>
            {
                a.MemberType = gridTable.Table.Columns[agg.Member].DataType;
            }));
        }
        return Json(gridTable.Table.ToDataSourceResult(request));

    }
    static DataTable ConvertListToDataTable(List<string> list)
    {
        // New table.
        DataTable table = new DataTable();

        table.Columns.Add("Name");

        int rows = list.Count;
        for (int i = 0; i <= rows - 1; i++)
        {

            table.Rows.Add(list[i]);
        }

        return table;
    }


}
}

当我尝试浏览 URl /Configuration/Index 我在模型中收到错误,好像模型在模型文件夹中不可用,即使它已经完成。

我也有一些问题,通过在浏览器上浏览从控制器调用视图,它给出了一个错误,该视图在文件夹中不可用,而我已经完成视图并将其连接到 ActionResult 方法在控制器中。

我无法 post 错误的屏幕截图,因为我必须有超过 10 个愚蠢的观点!!!! 无论如何,错误是

“/”应用程序中的服务器错误。

编译错误

描述:编译服务此请求所需的资源时出错。请查看以下特定错误详细信息并适当修改您的源代码。

编译器错误消息:CS0234:类型或命名空间名称 'GridDatatable' 在命名空间 'WEB02.Models' 中不存在(是否缺少程序集引用?)

来源错误:

第 38 行:
第 39 行:
第 40 行:publicclass_Page_Views_Configuration_Index_cshtml:System.Web.Mvc.WebViewPage{ 第 41 行:
第 42 行:#line hidden

源文件:c:\Users\ABK1LO\AppData\Local\Temp\Temporary ASP.NET Files\vs\b7cd7403\dfc9d84e\App_Web_index.cshtml.edf51036.0r4hbktj.0.cs 行:40

显示详细的编译器输出:

显示完整编译源:

版本信息:Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.34249

此问题的解决方案是将模型传递给视图并使用模型形成网格的列,然后通过从控制器中的方法读取的数据源获取数据。

kendo 网格视图如下:

@(Html.Kendo().Grid<dynamic>()
.Name("StatusGrid")
//.HtmlAttributes(new { style="width:50%;" })
.Columns(columns =>
{
    foreach (System.Data.DataColumn c in Model.GridStatus.Columns)
    {
        columns.Bound(c.ColumnName).EditorTemplateName("String");
    }
})
.DataSource(dataSource => dataSource
    .Ajax()
    .Events(events => events.Error("error_handler"))
    .Model(model =>
    {
        foreach (System.Data.DataColumn column in Model.GridStatus.Columns)
        {
            model.Field(column.ColumnName, column.DataType);
            model.Id("Id");
        }
    })
    .Read(read =>

        read.Action("StatusGeneric", "Configuration")
    )
))