2011-12-05 10 views
0

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); 
} 

答えて

1

あなたが$.ajaxコールの応答に何もしていません。

このような何か:

$.ajax(
{ 
    type: 'GET', 
    url: '@Url.Action("Index","Data")', 
    data: { FilterRequest: (ui.checked ? 'checked' : 'unchecked') }, 
    dataType: 'html', 
    success: function (html) { 
     $('#somecontainer').html(html); 
    } 
}); 

また、あなたのアクションメソッドからフルビュー(例えばHTMLページ)を返すことはできません - あなたはPartialView、またはJsonResultこれを返すためにどちらかの必要がありますコンテンツを繰り返し処理して内容をバインドすることができます。部分ビューのために

、あなたはこのようなものが必要:

それはすべてあなたが再レンダリングしようとしているかに依存します。再レンダリングが必要なHTMLが複雑な場合は、部分表示を使用します。入力要素(ドロップダウンリストなど)に押し込むだけのデータの場合は、ワイヤを介してHTTPペイロードに保存し、JsonResultを使用してください。

+0

返信用Thx。私は私のコントローラメソッドでいくつかの計算を行い、ビューは(IDから文字列リテラルへの)書式設定と参照を行い、インデックスメソッドを使用したい理由である複数のグリッドをdisiplayします。ですから、パーシャルビュールートを試してみましょう。つまり、フィルタリングされた結果を使ってjson結果を作成することはできますが、既存のグリッド(まだフィルタリングされていないグリッド)にバインドするにはどうすればよいでしょうか? – JaJ

+0

@Jaj - 確かに、グリッドをどのように実装したかによって異なります。パーシャルビューから始め、そこから行ってください。 '$ .ajax'ではなく' $ .get'を使ってJSコードを単純化することもできます。 – RPM1984

+0

私はhtml()メソッドを動作させることができませんでしたが、$( '#gridview')load( '@ Url.Action( "Filter")、data)ではwebgridsではなく、 – JaJ

関連する問題