我无法使用排序和分页功能来处理我的网格。我有一个充满数据的网格,使用Ajax Databindning。但是,当我尝试刷新或更改过滤信息时,我收到错误500。我有一个搜索功能,它将每个输入传递给控制器。
public ActionResult Results(FormCollection form)
{
string foo= form["foo"];
string bar= form["bar"];
model.Result(foo, bar);
var data = model.FilterResult().Select(o => new SearchViewModel
{
//Binding SearchViewModel propertys with the XML-elements found in model.FilterResults().
Foo= o.Element("Foo").Value,
Bar = o.Element("Bar").Value
});
return View(data);
}
在控制器中我调用“Result() - Method”,它基本上将输入值设置为模型中的Properties。 “FilterResult()” - 方法使用用户输入(属性)来使用LINQ查询XML文件。该方法返回带有XElements的IENumerable。
我的观点如下:
Html.Telerik().Grid(Model)
.Name("Search")
.PrefixUrlParameters(false)
.DataKeys(keys => { keys.Add(m => m.Foo); })
.Columns(columns =>
{
columns.Bound(o => o.Foo);
columns.Bound(o => o.Bar);
})
.DataBinding(dataBinding =>
{
dataBinding.Ajax()
.Select("Results", "Search").Enabled(true);
})
.Pageable(pager => pager.Enabled(true).PageSize(20))
.Sortable(sorting => sorting.Enabled(true).OrderBy(sortOrder => sortOrder.Add(o => o.TimeStamp).Ascending()))
.Filterable(filterable => filterable.Enabled(true))
.Render();
当我尝试更改任何过滤设置时,我收到输入值(在我的控制器中)的Error 500和NullException。我已经意识到它是空的,因为它在没有用户进行新搜索的情况下回调控制器,导致空值。所以我想知道如何做到这一点?我只想对已经在网格中的数据进行过滤和排序。
答案 0 :(得分:0)
如果foo和bar是页面上的表单元素,则可以使用ajax提交页面,这样在数据绑定时,您将以相同的方式调用数据。然后在您的视图中,将ClientEvents添加到网格中。
.ClientEvents(events => events.OnDataBinding("onDataBinding"))
onDataBinding函数如下所示:
<script type="text/javascript">
function onDataBinding(e) {
var foo = document.getElementById('foo').value;
var bar = document.getElementById('bar').value;
var params = { pFoo: foo, pBar: bar };
var paramsStr = $.param(params);
var selectUrl = '@Url.Action("Results", "Search")'
+ "?" + paramsStr;
var grid = $('#Grid').data('tGrid');
grid.ajax.selectUrl = selectUrl;
}
</script>
在你的控制器中,你传入的参数将是foo和bar。
public ActionResult Results(string pFoo, string pBar)
提交功能看起来像这样:
<script type="text/javascript">
function displaySummary() {
var grid = $('#Grid').data('tGrid');
var foo = document.getElementById('foo').value;
var bar = document.getElementById('bar').value;
$.ajax(
{
type: 'POST',
url: '@Url.Action("Results", "Search")',
dataType: 'json',
data: { pFoo: foo, pBar: bar },
success: function (result) {
grid.dataBind(result);
},
error: function (req, status, error) {
alert("Sorry! Error. " + status + error);
}
});
}
</script>