据我在Telerik论坛上的了解,似乎无法以这种方式实现。该论坛中有一个类似的问题,描述了完全相同的问题。将模型传递给控制器的操作方法时,模型始终为空。
但是,如果您想向选择方法传递多个参数以过滤数据,则可以使用一些客户端编程来解决此问题。
我将在此处包含该解决方法的摘要,以使答案更全面。单独的链接并没有太大作用。
假设我们有一个网格,显示所有订单的订单项(文章)。首先确保连接客户端的onDataBinding事件:
<%= Html.Telerik().Grid<Order>()
.Name("Grid")
.ClientEvents(events => events.OnDataBinding("onDataBinding"))
.DataBinding(dataBinding => dataBinding.Ajax()
.Select("_AjaxBinding", "Grid"))
%>
在客户端事件处理程序中,您需要组合选择URL。这里我将传递两个参数,一个订单ID(整数)和一篇文章的描述(字符串)。
<script type="text/javascript">
function onDataBinding(e) {
var orderId = 100;
var searchText = "test";
var params = { OrderId: orderId, ArticleDescription: searchText };
var paramsStr = $.param(params);
var selectUrl = "<%= @Url.Action("_AjaxFilterBinding", "Grid") %>"
+ "?" + paramsStr;
var grid = $('#Grid').data('tGrid');
grid.ajax.selectUrl = selectUrl;
}
</script>
然后在你的控制器中,你可以将 select 方法声明如下:
[GridAction]
public ActionResult _AjaxFilterBinding(AjaxFilterBindingModel model)
{
var data = ...;
return View(new GridModel<Order> { Data = data });
}
模型长这样:
public class AjaxFilterBindingModel
{
public int OrderId { get; set; }
public string ArticleDescription { get; set; }
}
通过URL(GET)传递集合也是可能的。假设您想要一个订单ID的集合而不仅仅是一个。
模型应该是这样的:
public class AjaxFilterBindingModel
{
public IEnumerable<int> OrderIds { get; set; }
public string ArticleDescription { get; set; }
}
而 JavaScript 代码则应该如下所示:
function onDataBinding(e) {
jQuery.ajaxSettings.traditional = true;
var intArray = [1, 2, 3, 4, 5];
var params = { OrderIds: intArray, ArticleDescription: "Test" };
var paramsStr = $.param(params);
var selectUrl = "<%= @Url.Action("_AjaxFilterBinding", "Home") %>" + "?"
+ paramsStr;
var grid = $('#Grid').data('tGrid');
grid.ajax.selectUrl = selectUrl;
}
注意:不要忘记设置 "jQuery.ajaxSettings.traditional = true;",否则参数会序列化不正确,而 ASP.NET MVC 模型绑定器将无法绑定整数数组。
这是我提到的 Telerik 论坛主题:
http://www.telerik.com/community/forums/aspnet-mvc/grid/getting-the-model-object-in-a-custom-binding-grid-ajax-controller.aspx
以下是建议的解决方法:
http://www.telerik.com/community/forums/aspnet-mvc/grid/code-sample-sending-additional-filters-with-ajax-binding.aspx