在MVC3索引视图中更改排序

时间:2011-03-24 09:43:29

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

想拥有可点击的列标题,例如点击TagCode一次,然后按顺序排序,然后又反转。数字相同。

使用MVC3 / Razor和LightSpeed(ORM)。

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

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

enter image description here

2 个答案:

答案 0 :(得分:2)

@戴夫

对不起,我在第一次回答时错过了你的要点 如果要使用纯MVC3实现排序, 我可以通过以下步骤

来做到这一点
  1. list action方法通过ViewBag将sortcolumn和订单信息传递给viewpage
  2. 使用列顺序显示构建actionlink的Html Helper方法
  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)



欢乐快乐!

Sangsu PARK(http://supremeware.blogspot.com

答案 1 :(得分:1)

@戴夫

如何使用mvccontribgrid只按如下方式进行排序:

enter image description here

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和简单的服务&amp; EF4。

另外,我发布了全功能的mvccontrib网格过滤&amp;传阅文章here