使用MVC Contrib在多个部分视图中进行分页和排序

时间:2013-01-24 03:34:46

标签: asp.net-mvc sorting paging mvccontrib

我使用asp mvc razor + mvc grid创建一个应用程序。 我的问题是:我有一个视图包含多个返回局部视图的动作,在每个局部视图中都有一个显示数据的网格。我正在使用支持分页和排序的mvc contrib grid。

我的观点(index.cshtml):

<div class="row-fluid">
    <div id="formations" class="control-group">
    @Html.Action("Formations")
</div>

<div id="pools" class="control-group">
    @Html.Action("Pools")
</div>

<div id="zones" class="control-group">
    @Html.Action("Zones")
</div>

形成行动:

    public ActionResult Formations(GridSortOptions sort, int? page, string filter = "all")
    {

        IPagination<StratUnitVo> pagination = ....        
        return PartialView("_Formations", pagination);
    }

部分视图_Formations:

@Html.Grid(Model).Sort(ViewData["sort"] as GridSortOptions).Columns(col =>
  {
       col.For(p => Html.ActionLink(p.LongName, "EditFormation", "Stratigraphy", new { id = p.Id }, null).ToHtmlString()).Encode(false).Named(Locale.Name).SortColumnName("LongName");
       col.For(p => p.FormCode).Named(Locale.Code);
   col.For(p => p.ReferenceStratUnit.LongName).Named(Locale.ReferenceFormation);      
   }).Attributes(@class => "table table-condensed table-striped table-hover")

@if (Model.Count() > 0)
{
    @Html.Raw(@Html.Pager(Model)));
}

其他动作和视图最像上面的示例(只是模型数据的差异)。 我的问题是:

  1. 当我在一个网格中单击导航分页(例如:格式)时,其他网格(池和区域)将导航到。例如:单击格式网格中的第2页也会将另一个网格移动到第2页。
  2. 当我单击一个网格中的列标题(这意味着我想对数据进行排序)时,整个页面将被部分视图替换。我想要的只是我点击的网格已经排序。
  3. 我该如何解决?

    谢谢!

1 个答案:

答案 0 :(得分:4)

好吧,我刚刚解决了我的问题:

  1. 对于分页:为每个名为“type”的操作添加新参数,并根据参数进行验证。

    public ActionResult Formations(GridSortOptions sort, int? page, string type, string filter = "all")
    {
        if (type != null && !type.Equals("Formation")) page = 1;            
    
        IPagination<StratUnitVo> pagination = ......
        return PartialView("_Formations", pagination);
    }
    
  2. 用于排序:对mvc grid使用ajax排序:

    $(function () {
        ajaxSort('pools', 'Stratigraphy', 'Pools');
        ajaxSort('formations', 'Stratigraphy', 'Formations');
        ajaxSort('zones', 'Stratigraphy', 'Zones');         
    });
    
    function ajaxSort(tableId, controllerName, actionName) {
    $(document).on('click', '#' + tableId + ' > table > thead > tr > th > a', (function () {
    // store the href attribute, will get the column and direction parameter
    var href = $(this).attr('href');
    
    // mvc grid sort url is : 'http\\controllerName\\actionName?Column=columnname&Direction=[Ascending|Descending]            
    var temp = href.split('&');
    
    // retrieve the column name
    var column = temp[0].split('=')[1];
    // retrieve sort direction
    var direction = temp[1].split('=')[1];
    // retrieve column header
    var columnHeader = $(this).text();
    
    // remove the href attribute, prevent postback
    $(this).removeAttr('href');
    
    // use ajax to sort
    $.ajax({
        url: '/' + controllerName + '/' + actionName,
        data: { 'Column': column, 'Direction': direction },
        dataType: 'html',
        success: function (data) {                
            $('#' + tableId).html(data);
    
            columnHeader = columnHeader.replace('\u25B2', '').replace('\u25BC', '');
    
            // show up down arrow
            // \u25B2 and \u+25BC is the unicode character for up/down triangle (arrow) to display in HTML                                
            var column = $('#' + tableId + ' > table > thead > tr > th > a:contains(' + columnHeader + ')');
    
            if(direction == 'Ascending')
                column.text(columnHeader + "\u25B2");
            else {                
                column.text(columnHeader + "\u25BC");
            }
        },
       });
      }));
    }
    
相关问题