並べ替えとページング機能をグリッドで動作させるのに問題があります。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()-メソッド」を呼び出します。「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();
フィルタリング設定を変更しようとすると、入力値 (コントローラー内) に対してエラー 500 と NullException の両方を受け取ります。ユーザーが新しい検索を行わずにコントローラーにコールバックし、null 値になるため、null であることがわかりました。だから私はこれをどのように行うことができるのだろうか?既にグリッドにあるデータに対してのみフィルタリングと並べ替えを行いたいです。