2

我正在尝试Telerik Kendo ListView与我的 ASP.NET MVC 4 Web 应用程序一起使用,但我无法填充它。我遵循了 Telerik 的 Kendo ListView Controller 和 View 示例,但DataSource没有ListViewBuilder得到填充。以下是我使用的相关代码FooView

@model IEnumerable<FooViewModel>
<script type="text/x-kendo-tmpl" id="template">
    <div class="Foo">        
        <h3>#:FooName#</h3>            
    </div>
</script>

<div class="FooList">
@(Html.Kendo().ListView<FooViewModel>(Model)
    .Name("listView")
    .TagName("div")
    .ClientTemplateId("template")    
    .DataSource(dataSource => 
    {
        dataSource.Read(read => read.Action("Foo_Read","Foo").Type(HttpVerbs.Get));
        dataSource.PageSize(15);        
    })
    .Pageable()
)
</div>

我希望Foo_Read得到执行,FooController但它没有。我怀疑这就是为什么Kendo ListView没有被填充的原因。那么,有人能告诉我为什么我的Foo_Read行动没有被执行FooController吗?谢谢。

编辑

我包含了相关的控制器代码,但我简化了它只是为了看看我是否可以让 Visual Studio 中断,Foo_Read但它没有达到我的断点。

相关的 FooController.cs 代码:

public class FooController : Controller
{
  private Entities db = new Entities();

  public ActionResult Foo_Read([DataSourceRequest] DataSourceRequest request)
  {
    return Json(request, JsonRequestBehavior.AllowGet);
  }
}
4

3 回答 3

2

看来你的行动是不完整的。不应该是这样的:

public ActionResult Foo_Read([DataSourceRequest] DataSourceRequest request)
  {
    return return Json(db.ToDataSourceResult(request));
  }

好吧,在您对我的问题发表评论并看到您自己的问题之后,我的脑海中突然出现了一些问题。

在您的解决方案中,您正在混合概念。如果您将数据源定义为读取控制器操作,则不需要使用 BindTo 方法。您的解决方案可能绑定到 ViewData 数据而不是读取操作返回的数据。这就是为什么,如果我现在理解正确,我认为您应该使用“AutoBind(true)”,如下所示:

@model IEnumerable<FooViewModel>
<script type="text/x-kendo-tmpl" id="template">
    <div class="Foo">        
        <h3>#:FooName#</h3>            
    </div>
</script>

<div class="FooList">
@(Html.Kendo().ListView<FooViewModel>(Model)
    .Name("listView")
    .TagName("div")
    .ClientTemplateId("template").AutoBind(true)    
    .DataSource(dataSource => 
    {
        dataSource.Read(read => read.Action("Foo_Read","Foo").Type(HttpVerbs.Get));
        dataSource.PageSize(15);        
    })
    .Pageable()
)
</div>

您可能还想查看这里,看看它是否对您有帮助。

于 2013-11-02T13:57:00.367 回答
1

我想到了。它应该是以下内容:

@model IEnumerable<FooViewModel>
<script type="text/x-kendo-tmpl" id="template">
    <div class="Foo">        
        <h3>#:FooName#</h3>            
    </div>
</script>

<div class="FooList">
@(Html.Kendo().ListView<FooViewModel>(Model)
    .Name("listView")
    .TagName("div")
    .ClientTemplateId("template")    
    .DataSource(dataSource => 
    {
        dataSource.Read(read => read.Action("Foo_Read","Foo").Type(HttpVerbs.Get));
        dataSource.PageSize(15);        
    })
    .BindTo((IEnumerable<FooViewModel>)ViewData["listView"])
    .Pageable()
)
</div>

注意.BindTo((IEnumerable<FooViewModel>)ViewData["listView"])我添加的。显然,这有所作为。不过,不完全确定为什么。Telerik 的示例没有那条线。

于 2013-11-04T16:25:29.460 回答
0

使用最新版本的 kendo,您可以设置 .AutoBind(true) 然后在第一次加载列表视图时执行读取事件。

或者,可以从 javascript 调用 read 方法:

$(document).ready(function () {
    var listView = $("#lstview").data("kendoListView");
    listView.dataSource.read();
});
于 2015-01-14T07:28:24.670 回答