如何使用KendoUI Grid MVC访问ViewModel

时间:2013-09-09 18:19:54

标签: asp.net-mvc-4 kendo-ui kendo-asp.net-mvc

我有这样的观点:

@model MySearchVM

//Filters
...
 @Html.TextBoxFor(model => model.Description)
 @Html.TextBoxFor(model => model.Letter)
...

//Grid
@(Html.Kendo().Grid<MyGridVM>()
    .Name("MyGrid")
    .Columns(columns =>
    {
       columns.Bound(p => p.Id).Hidden(true);
       columns.Bound(p => p.Description);
       columns.Bound(p => p.Letter);
    })
    .Groupable()
    .Pageable()
    .Sortable()
    .Scrollable()
    .DataSource(dataSource => dataSource
          .Ajax()
          .Read(read => read.Action("_Read", "MyController"))
          .Model(model => model.Id(p => p.Id)))
)

我的控制器:

public ActionResult _Read([DataSourceRequest] DataSourceRequest request)
{
    var list = repository.GetAll().Select(x => new MyGridVM()
    {
        Id = x.Id,
        Description = x.Description,
        Letter = x.Letter,
    });

    return Json(list.ToDataSourceResult(request));
}

一切都很棒...但我想在_Read动作中访问我的ViewModel,所以我可以手动过滤结果......

我试图传递FormCollection,但只能从中获取:sort,page,pageSize,group和filter

我该怎么做?

由于

1 个答案:

答案 0 :(得分:1)

在action方法中将不会自动发送到服务器。我可以建议你在阅读配置的data函数的帮助下发送你需要的任何动作方法,以发送你需要的任何东西。

e.g。

.DataSource(dataSource => dataSource.Ajax()
    .Read(read => read
        .Action("Read", "Home")
        .Data("additionalData")
    )
)
// -- removed for brevity
<script>
    function additionalData() {
        return {
            userID: 42,
            search: $("#search").val()
        };
    }
</script>