【问题标题】:Change ordering in MVC3 Index viewMVC3 索引视图中的更改顺序
【发布时间】:2013-04-30 05:49:48
【问题描述】:

希望有可单击的列标题,例如单击 TagCode 一次,然后按此排序,然后再次反转。 Number 也一样。

使用 MVC3/Razor 和 LightSpeed (ORM)。

我知道像http://mvccontrib.codeplex.com/ 这样的网格可能是前进的方向。但由于我不需要分页或过滤,所以我现在想保持简单。

问题是否有一个简单的代码示例(可能带有向上/向下图标)可以提供帮助?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 razor


    【解决方案1】:

    @戴夫

    对不起,我在第一个答案中错过了您的主要观点
    如果要使用纯 MVC3 实现排序, 我可以通过以下步骤做到这一点

    1. list 操作方法通过 ViewBag 将 sortcolumn 和订单信息传递给 viewpage
    2. Html Helper 方法来构建带有列排序显示的 actionlink
    3. 列表视图页面调用辅助方法

    I uploaded source code here


    列表操作方法
            public ActionResult Index(string sortColumn, bool? asc)
        {
            if (string.IsNullOrWhiteSpace(sortColumn))
                sortColumn = "Number";
    
            asc = asc ?? true;
            SortDirection sortDirection = asc == true ? SortDirection.Ascending : SortDirection.Descending;
            var query = _service.GetTags().OrderBy(sortColumn, sortDirection);
    
            return View(query);
        }
    

    Html 辅助方法

            public static MvcHtmlString ActionLinkWithColumnOrder(this HtmlHelper helper,
            string columnName,string action,string currentColumn,bool currentOrder)
        {
            object routeValues;
            object htmlAttributes = null;
            if (columnName == currentColumn)
            {
                routeValues = new { sortColumn = columnName, asc = !currentOrder };
                htmlAttributes = new { @class = currentOrder ? "sort_asc" : "sort_desc" };
            }
            else
            {
                routeValues = new { sortColumn = columnName };
            }
    
            return helper.ActionLink(columnName, action, routeValues, htmlAttributes);
        }
    

    列表视图页面
    ...
    @Html.ActionLinkWithColumnOrder("TagCode", "Index", (string)ViewBag.sortColumn, (bool)ViewBag.asc)
    ...
    @Html.ActionLinkWithColumnOrder("Number", "Index", (string)ViewBag.sortColumn, (bool)ViewBag.asc)



    Mvcing 快乐!

    桑苏公园 (http://supremeware.blogspot.com)

    【讨论】:

    【解决方案2】:

    @戴夫

    如何使用 mvccontribgrid 仅按如下方式排序:

    IMO,使用 mvccontribgrid 可能会带来更简单的代码。 例如,这是控制器代码

        public class HomeController : Controller
    {
        private AlbumService _service;
    
        public HomeController()
        {
            _service = new AlbumService();
        }
    
        public ActionResult Index(GridSortOptions gridSortOptions)
        {
            var vm = new ViewModel<Album>()
            {
                DefaultSort = "AlbumId",
                GridSortOptions = gridSortOptions,
                List = _service.GetAlbums()
                .OrderBy(gridSortOptions.Column, gridSortOptions.Direction),
            };
    
            return View(vm);
        }
    
        public ActionResult Details(int id)
        {
            var album = _service.GetAlbum(id);
            ViewBag.RouteDicForList = Request.QueryString.ToRouteDic(); 
            return View(album);
        }
    }
    

    我附上了简单的排序函数源代码here,带有简单的服务和EF4。

    另外,我发布了全功能 mvccontrib 网格过滤和分页文章here

    【讨论】:

    • 非常感谢@Sangsu 我实际上正在寻找一些超级简单的东西.. 但这看起来是一个很好的下一步。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多