【问题标题】:Kendo UI Grid MVC Not renderingKendo UI Grid MVC 不渲染
【发布时间】:2014-06-13 06:27:42
【问题描述】:

我最近开始将 Kendo UI 整合到我的项目中。我有一个强类型视图,并希望将 Kendo 网格绑定到视图上的适当视图模型:

@ModelType IEnumerable(Of IMS_2.Models.expenseclaims)
@Code
ViewData("Title") = "Index"
End Code

<h2>Index</h2>

    <div>
    @code
        Html.Kendo().Grid(Model).Name("ExpenseClaims") _
         .Columns(Sub(c)
                          c.Bound(Function(x) x.ClaimDate).Width(140)
                          c.Bound(Function(x) x.Title).Width(190)
                          c.Bound(Function(x) x.Company)
                  End Sub)
    end code
</div>

代码在服务器上无异常执行,在客户端也无 javascript 错误。对渲染源的检查显示没有提到网格:

<h2>Index</h2>

<div>          
</div>
        <hr />
        <footer>

...等

我的代码是(我认为)我在 c# 中看到的其他示例的直接翻译(参见 http://telerikhelper.net/2012/10/26/using-kendo-grid-in-asp-net-mvc-4-0/

Expenseclaims 由 EF 模板生成,定义为:

 Partial Public Class expenseclaims
        Public Property id As Long
        Public Property Title As String
        Public Property ClaimDate As Nullable(Of Date)
        Public Property Creator As Nullable(Of Long)
        Public Property Company As Long
        Public Property AdvanceOffset As Nullable(Of Decimal)   
        Public Overridable Property expenselines As ICollection(Of expenselines) = New HashSet(Of expenselines)
        Public Overridable Property companies As companies 
    End Class

控制器代码为:

 Public Class ExpenseController
        Inherits System.Web.Mvc.Controller

        Private db As New IMSEntities

        ' GET: /Expense/
        Function Index() As ActionResult
            Return View(db.expenseclaims.ToList())
        End Function

这是我难过的地方...任何帮助表示感谢。

【问题讨论】:

  • 我认为我们在这里唯一缺少的(代码方面)是您的 Controller 方法。它应该是公共的 ActionResult Index()....,它包含 DataClasses1DataContext,它依次通过 return View(context.Persons) 行传递“填充”模型。我知道您的代码会略有不同,但您可以在 VB.NET 代码中的“返回”行设置一个断点,以查看是否有任何数据正在传递。
  • 谢谢 - 是的 - 在网格语句上设置断点使我可以看到“模型”包含 221 个数据项。已将控制器代码添加到问题中。
  • 您是否尝试过删除返回方法中的 .ToList() 部分?也许它没有正确传递上下文?
  • 这似乎没有任何区别 - 尽管我无法再看到模型中的 221 个数据项(模型直接引用 EF 实体而不是项目列表)。无论哪种方式,网格仍然没有呈现。

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


【解决方案1】:

编辑:您确实需要 .tolist() 一个非常好的 vb 开始是在 Telerik,至少那是我开始的地方 http://docs.telerik.com/kendo-ui/getting-started/using-kendo-with/aspnet-mvc/vb 我的做法有点不同,但这对你来说应该得到相同的结果。我认为问题可能是您正在包装这是一个代码块,这与我阅读的内容并不完全正确。这是我为跟踪网格所做的示例。 我有数据源的地方(因为我使用 ajax 源并且您想使用模型),您可以输入以下内容:

  .DataSource(dataSource => dataSource        
            .Ajax()
            .PageSize(20)
            .ServerOperation(false)        
         )

最重要的是,您似乎缺少数据源,老实说,我不确定代码块,但我不会那样做。

 @(Html.Kendo().Grid(Of TrackingGroupModel)().Name("grid") _
        .Columns(Function(col)
                     col.Bound(Function(e) e.TrackingNumber).ClientTemplate("<a href='#=ShippingCompanyUrl##=TrackingNumber#' target='_blank'>#=TrackingNumber#</a>")
                     col.Bound(Function(e) e.DateAdded).Format("{0:D}")
                     col.Bound(Function(e) e.ProductCount).Title("Total Shipped")
                     col.Command(Function(command) command.[Custom]("View Details").Click("showDetails"))
                 End Function)
.DataSource(Function(ds) ds.Ajax().Read(Function(read) read.Action("getTracking", "OrderManagement", New With {.id = Model.Id})))
        )

【讨论】:

  • 谢谢!我知道我使用的是模型而不是数据源,但我一直遵循的示例(上面的链接)似乎表明它应该与模型一起使用。但是 - 你把我放在正确的行上 - 我删除了代码块,而是将网格语句封装在 @() 中并且它可以工作。不知道为什么 - 也许有人可以让我们知道。另外 - 它似乎可以使用或不使用 .toList
猜你喜欢
  • 1970-01-01
  • 2013-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多