Изменение порядка в представлении индекса MVC3 - PullRequest
2 голосов
/ 24 марта 2011

Хотелось бы иметь кликабельные заголовки столбцов, например, кликнуть на TagCode один раз, и он упорядочится по нему, и снова он перевернется.То же самое для Number.

Использование MVC3 / Razor и LightSpeed ​​(ORM).

Я знаю, что сетка, например, http://mvccontrib.codeplex.com/, может быть способом продвижения вперед.Но так как мне не нужно пейджинг или фильтрация, я бы хотел пока упростить его.

Проблема Есть ли простой пример кода (возможно, со значком вверх / вниз)) что поможет?

enter image description here

Ответы [ 2 ]

2 голосов
/ 01 апреля 2011

@ Dave

Извините, я пропустил ваш главный вопрос в своем первом ответе
Если вы хотите реализовать сортировку с использованием чистого MVC3, Я могу сделать это с помощью следующих шагов

  1. метод действия списка, передающий sortcolumn и информацию о заказе на страницу просмотра через ViewBag
  2. Html вспомогательный метод для создания actionlink с отображением порядка столбцов
  3. страница просмотра списка, вызывающая вспомогательный метод

Я загрузил исходный код здесь

<ч /> Метод действия со списком

        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", (строка) ViewBag.sortColumn, (bool) ViewBag.asc)
...
@ Html.ActionLinkWithColumnOrder ("Число", "Индекс", (строка) ViewBag.sortColumn, (bool) ViewBag.asc)



Happy Mvcing!

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

1 голос
/ 24 марта 2011

@ Dave

Как насчет использования 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);
    }
}

Я прикрепил исходный код функции простой сортировки здесь с простым обслуживанием и EF4.

Кроме того, я разместил полнофункциональную фильтрацию сетки mvccontrib& paging article здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...