刷新asp.net mvc页面

时间:2010-12-12 20:42:33

标签: asp.net-mvc

我在asp.net mvc上有一些应用程序。 我正在尝试创建表过滤器。页面非常难,所以我无法从JSON响应中获取数据。我试图通过使用params的呼叫操作来获取它。

   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(带有参数)去(重定向)。我不想在客户端重建页面

2 个答案:

答案 0 :(得分: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 :(得分:1)

我在上面的代码中看到一个问题:

当您的请求完成后,$.get()无法执行任何操作(您的数据已从服务器获取)

您应该传入一个带有参数的函数,而不是传递null。例如:

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

在此功能中,您实际上可以将过滤器应用于表