ajaxコールからViewResult Index()コントローラアクションにコールバックしてドロップダウン選択に基づいてページコンテンツを更新しようとしましたが、ビューが再更新されません(再レンダリング)。ajaxコールからコールバックした後でインデックスビューViewResultが再レンダリングされない
私はブレークポイントを設定しており、コントローラのindex()アクションはajax 'get'から呼び出されて実行され、モデルはビューに渡されます(ブレークポイントはビュー内でもヒットしています)。
ビュー:
@* Contains code to build a webgrid and display data based on the model passed in... *@
@* Contains a couple of dropdowns for filtering *@
@*
Catch the select event from a dropdown and call back into the view to re-update page contents
for filter requests.
*@
<script type="text/javascript">
$("select").multiselect({
click: function (event, ui) {
$.ajax(
{ type: "GET",
url: '@Url.Action("Index","Data")',
data: { FilterRequest: (ui.checked ? 'checked' : 'unchecked') },
success: function() {
alert('hello again');
}
})
}
});
</script>
コントローラー:
// GET: /Data/
public ViewResult Index(string FilterRequest)
{
IList<DataModel> dataResult;
if (FilterRequest == null)
{ // Not a filter request so just update grid with full contents
dataResult = db.DataObjs.OrderByDescending(x => x.id).ToList();
}
else
{ // Filter request so update grid with filtered data
dataResult = db.DataObjs.Where(/*Build some filtered stuff here*/).OrderByDescending(x => x.id).ToList();
}
// Build some sub totals based on the resultset from above result set to display
// Other business logic number mashing here to display in other grids on the same view
return View(dataResult);
}
返信用Thx。私は私のコントローラメソッドでいくつかの計算を行い、ビューは(IDから文字列リテラルへの)書式設定と参照を行い、インデックスメソッドを使用したい理由である複数のグリッドをdisiplayします。ですから、パーシャルビュールートを試してみましょう。つまり、フィルタリングされた結果を使ってjson結果を作成することはできますが、既存のグリッド(まだフィルタリングされていないグリッド)にバインドするにはどうすればよいでしょうか? – JaJ
@Jaj - 確かに、グリッドをどのように実装したかによって異なります。パーシャルビューから始め、そこから行ってください。 '$ .ajax'ではなく' $ .get'を使ってJSコードを単純化することもできます。 – RPM1984
私はhtml()メソッドを動作させることができませんでしたが、$( '#gridview')load( '@ Url.Action( "Filter")、data)ではwebgridsではなく、 – JaJ