索引ViewResult在从ajax调用回调后不重新呈现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了索引ViewResult在从ajax调用回调后不重新呈现相关的知识,希望对你有一定的参考价值。

我正在尝试从ajax调用回调到我的ViewResult Index()控制器操作,以根据下拉选择更新页面内容,但我的视图没有重新更新(重新渲染)。

我已经设置了断点,并且正在执行从ajax'get'调用的控制器中的index()动作,并且模型被传递给视图(断点也在视图中被命中)。

视图:

  @* 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);
 }
答案

你没有对$.ajax电话的响应做任何事情。

像这样的东西:

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

此外,您无法从操作方法返回完整视图(例如HTML页面) - 您需要返回PartialViewJsonResult,您可以迭代并手动绑定内容。

对于局部视图,您需要这样的东西:

return PartialView(dataResult);

这一切都取决于你试图重新渲染的内容。如果重新渲染所需的HTML很复杂,则使用局部视图。如果只是将一堆数据推入输入元素(例如下拉列表),则应该通过线路保存HTTP有效负载并使用JsonResult

以上是关于索引ViewResult在从ajax调用回调后不重新呈现的主要内容,如果未能解决你的问题,请参考以下文章

将索引从 for 循环传递到 ajax 回调函数 (JavaScript)

一些理解-过滤器,拦截器,ajax提交后不跳转,document.location.href无效,回调函数。

Django用户身份验证:登录后不重定向

JSF过滤器在初始重定向后不重定向[关闭]

mongoose.connect 在连接到 mongodb 后不调用回调

使用 Django 和 AllAuth 登录后不重定向到我自己的视图