【问题标题】:Paging, sorting, searching on Ajax View in asp.net mvc在asp.net mvc中的Ajax View上分页、排序、搜索
【发布时间】:2016-01-24 10:11:32
【问题描述】:

我正在使用asp.net mvc 4EF 6 创建一个网站,在该网站上我需要一个填充表,用于在Ajax 的 PartialView 上进行分页、排序和过滤/搜索。到目前为止,分页、排序和搜索功能运行良好,但我无法将其用于 Ajax,其中表格只会更新而不是重新加载页面。这是我的代码,

控制器

public PartialViewResult Flats(string sortOrder, string currentFilter, string strSearch, int? page)
{
    ViewBag.currentSort = sortOrder;
    if (strSearch != null)
    {
        page = 1;
    }
    else
    {
        strSearch = currentFilter;
    }
    ViewBag.CurrentFilter = strSearch;

    ViewBag.TitleSort = String.IsNullOrEmpty(sortOrder) ? "title_desc" : "";
    var FlatsOrder = from f in rentdb.FlatInfoes select f;
    if (!String.IsNullOrEmpty(strSearch))
    {
        FlatsOrder = FlatsOrder.Where(s => s.address_area.Contains(strSearch));
    }
    switch (sortOrder)
    {
        case "title_desc":
            FlatsOrder = FlatsOrder.OrderByDescending(a => a.title);
            break;
        default:
            FlatsOrder = FlatsOrder.OrderBy(a => a.title);
            break;
    }
    int pageSize = 5;
    int pageNumber = (page ?? 1);
    return PartialView(FlatsOrder.ToPagedList(pageNumber, pageSize));
}

查看

<div id="divTable" class="span12" style="background-color: #fff;">
    <table class="table table-hover">
        <thead style="background-color: #cccccc;">
            <tr>
                <th class="text-center">
                    @Ajax.ActionLink("Title", "Flats", new { sortOrder = ViewBag.TitleSort, currentFilter = ViewBag.CurrentFilter }, new AjaxOptions() {
                                            HttpMethod = "GET",
                                            UpdateTargetId = "divTable",
                                            InsertionMode = InsertionMode.Replace
                                        })
                </th>
            </tr>
        </thead>
    </table>
</div>

每当我单击Title 链接进行排序时,整个页面都会重新加载然后排序。如何通过 ajax 和 partialview 更新表格?非常需要这个帮助。谢谢。

【问题讨论】:

  • 你是否加入了jquery.unobtrusive-ajax.js
  • 是的,并且还检查了web.config 中的ClientValidationEnabledUnobtrusiveJavaScriptEnabled。两者都是真的!
  • 不确定您的链接会做什么。它没有传递strSearchpage 的值,所以它只会继续生成相同的视图。
  • 我刚刚在View 中给出了排序代码,如果有人能找到解决方案,那么我可以完成剩下的工作。
  • 只是一个提示,我想在同一个视图上更新表格。

标签: asp.net ajax asp.net-mvc


【解决方案1】:

您必须制作一个包含 PartialView 的普通视图,如下所示

查看

@model YourModelClass

@* some thing which will not effected when the Ajax request is done *@
@Html.Partial("_TablePartialView", Model)

部分视图,在这种情况下应命名为“_TablePartialView”,并应存在于“视图”文件夹内的“共享”文件夹中。

@model YourModelClass

<div id="divTable" class="span12" style="background-color: #fff;">
  <table class="table table-hover">
    <thead style="background-color: #cccccc;">
        <tr>
            <th class="text-center">
                @Ajax.ActionLink("Title", "AjaxFlats", new { sortOrder = ViewBag.TitleSort, currentFilter = ViewBag.CurrentFilter }, new AjaxOptions() {
                                        HttpMethod = "GET",
                                        UpdateTargetId = "divTable",
                                        InsertionMode = InsertionMode.Replace
                                    })
            </th>
        </tr>
    </thead>
  </table>
</div>

控制器

private YourModelClass GetModel(string sortOrder, string currentFilter, string strSearch, int? page)
{
   ViewBag.currentSort = sortOrder;
   if (strSearch != null)
   {
      page = 1;
   }
   else
   {
      strSearch = currentFilter;
   }
   ViewBag.CurrentFilter = strSearch;

   ViewBag.TitleSort = String.IsNullOrEmpty(sortOrder) ? "title_desc" : "";
   var FlatsOrder = from f in rentdb.FlatInfoes select f;
   if (!String.IsNullOrEmpty(strSearch))
   {
       FlatsOrder = FlatsOrder.Where(s => s.address_area.Contains(strSearch));
   }
   switch (sortOrder)
   {
      case "title_desc":
         FlatsOrder = FlatsOrder.OrderByDescending(a => a.title);
         break;
       default:
         FlatsOrder = FlatsOrder.OrderBy(a => a.title);
         break;
   }
   int pageSize = 5;
   int pageNumber = (page ?? 1);
   return FlatsOrder.ToPagedList(pageNumber, pageSize);

}

public ActionResult Flats(string sortOrder, string currentFilter, string strSearch, int? page)
{
     return View(GetModel(sortOrder, currentFilter, strSearch, page);
}

public ActionResult AjaxFlats(string sortOrder, string currentFilter, string strSearch, int? page)
{
     return PartialView("_TablePartialView", GetModel(sortOrder, currentFilter, strSearch, page);
}

【讨论】:

  • 谢谢,但这无济于事。
  • @您能否粘贴 PartialView 和包含它的 OrgianlView。我认为这有助于解决问题
  • 请注意,我使用的是同一个视图,我只是想更新同一页面上的表格,而不是重新加载页面。
  • @SinOscuras 现在我完全理解了你的问题。您必须完全重新设计视图并制作一个按正常(非 ajax)请求请求的视图。在该视图中,您必须在必须刷新表时创建其他 PartialView。
  • @SinOscuras 我完全更新了答案。请参考它,这应该可以工作(如我所愿),如果有任何问题,我会在这里提供帮助
猜你喜欢
  • 1970-01-01
  • 2023-03-20
  • 2020-04-12
  • 2012-10-16
  • 2014-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多