2010-12-12 120 views
2

我在asp.net mvc上有一些應用程序。 我試圖創建表格過濾器。頁面非常困難,所以我無法從JSON響應中獲取數據。我試圖通過調用params來調用它。刷新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獲取請求時,您可以僅返回部分視圖而不是全部視圖。我要做的另一件事是將視圖強制鍵入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"); 
在這個函數

,你其實可以有應用到表的過濾器