2010-12-12 16 views
2

私はasp.net mvcにいくつかのアプリを持っています。 テーブルフィルタを作成しようとしています。ページは非常に難しいので、私はJSONの応答からデータを取得することはできません。私はparamsでコールアクションを介して取得しようとしています。Refresh asp.net mvcページ

function refresh() { 
     var id = $("#list").val(); 
     var params = { id: id }; 
     $.get("/Home/Index", params, null, "json"); 

    } 

<select id="list" onchange="refresh()"> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
    <option value="4">4</option> 
</select> 
<%foreach (var i in (IEnumerable<int>)ViewData["list"]) 
    { %> 
    <%=i %><br /> 
<%} %> 

    public ActionResult Index(int? id) 
    { 
     if (id == null) 
      id = 0; 

     ViewData["list"] = Enumerable.Range((int)id, 5).Select(i => i).ToList<int>(); 

     return View(); 
    } 

新しいデータは表示されません。どうしましたか? ページを更新する方法は?

PSアクションAからアクションA(パラメータ付き)に移動(リダイレクト)したいと思います。私はクライアント側のページを再構築したくありません

答えて

5

get呼び出しで取得した結果は何もしていません。また、ビューを返すので、データ型をhtmlに設定する必要があります。

$.get('/Home/Index', params, function(html) { 
     $('body').html(html); 
    },'html'); 

私は、おそらく更新されるセクションを置き換えるだけであることに注意したいと思います。これを行うには、部分的なビューを使用してそのセクションだけを保持し、AJAX経由でリクエストを受け取ったら、フルビューの代わりに部分的なビューを返すことができます。もう1つは、ビューデータを使用する代わりに、ビューを厳密に型指定してIEnumerable<int>にし、モデルを渡すことです。

ビュー

<script type="text/javascript"> 
    $(function() { 
     $('#list').change(function() { 
      var id = $("#list").val(); 
      var params = { id: id }; 
      $.get("/Home/Index", params, function(html) { 
       $('#listResults').replaceWith(html) 
      }, "html"); 
     }); 
    }); 
</script> 

<select id="list"> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
    <option value="4">4</option> 
</select> 
<% Html.RenderPartial("ListResults"); %> 

部分図

<div id="listResults"> 
<%foreach (var i in Model) 
    { %> 
    <%=i %><br /> 
<%} %> 
</div> 

アクション

public ActionResult Index(int? id) 
{ 
    if (id == null) 
     id = 0; 

    var model = Enumerable.Range((int)id, 5).Select(i => i).ToList<int>(); 
    if (this.Request.IsAjaxRequest()) 
    { 
     return PartialView(model); 
    } 
    return View(model); 
} 
1

私は上記のコードでは一つの問題を参照してください。

$.get()は行いません。あなたの要求が完了したときに何か(サーバーからデータを取り出したとき)

nullを渡す代わりに、データであるパラメーターを持つ関数を渡す必要があります。例:あなたが実際にあなたのフィルタは、テーブル

に適用することができます。この機能で

$.get("/Home/Index" 
    , params, 
     function(data){ 
     //do something with data. 
     //data is json object returned 
    }, "json"); 

関連する問題