Помощь по созданию пользовательской бритвы HelperResult - PullRequest
0 голосов
/ 05 сентября 2011

В моем проекте ASP.NET MVC 3 я создал помощник PaginatedList. Я обращаюсь с этим в представлении следующим образом:

@model TugberkUgurlu.Mvc.Helpers.PaginatedList<ContactModel>

@*
some razor code here to display the data
*@

<div id="pager">

    @if (Model.HasPreviousPage)
    {

        @:@Html.RouteLink("<<<< Previous",
                   "Default",
                    new { page = (Model.PageIndex - 1) })

    }

    @if (Model.TotalPages >= 2)
    {

        for (int i = 0; i < Model.TotalPages; i++)
        {

            int value = i + 1;

            if (Model.PageIndex == i)
            {

                @:@Html.RouteLink(value.ToString(),
                   "Default",
                    new { page = (i) }, new { @class = "bold" })

            }
            else
            { 

                @:@Html.RouteLink(value.ToString(),
                   "Default",
                    new { page = (i) })

            }

        }
    }

    @if (Model.HasNextPage)
    {

        @:@Html.RouteLink("Next >>>>",
                   "Default",
                    new { page = (Model.PageIndex + 1) })

    }

</div>

Я хотел бы создать HelperResult для кода внутри элемента <div id="pager"></div>, чтобы я не повторял себя и, самое главное, когда я вносил изменения в этот код, он будет изменяться везде, где он находится б.

У меня пока нет лучшей идеи. Есть мысли?

1 Ответ

1 голос
/ 05 сентября 2011

Для моего использования я нашел помощника, который делает что-то похожее на ваш запрос.Я использую некоторые другие переменные, но я думаю, что вы поняли идею и можете взять мой код и изменить его в соответствии с вашими потребностями

public static MvcHtmlString PageLinks(this HtmlHelper html, int totalItems, int itemsPerPage, int currentPage, Func<int, string> pageUrl)
{
  return PageLinks(html, totalItems, itemsPerPage, currentPage, "", "", pageUrl);
}

public static MvcHtmlString PageLinks(this HtmlHelper html, int totalItems, int itemsPerPage, int currentPage, string cssClass, string cssClassSelectedPage, Func<int, string> pageUrl)
{
  int totalPages = (int)Math.Ceiling((decimal)totalItems / itemsPerPage);
  StringBuilder result = new StringBuilder();
  for (int i = 1; i <= totalPages; i++)
  {
    string css = cssClass;
    TagBuilder tag = new TagBuilder("a");
    tag.MergeAttribute("href", pageUrl(i));
    tag.InnerHtml = i.ToString();
    if (i == currentPage)
      css += " " + cssClassSelectedPage;
    if (!String.IsNullOrEmpty(cssClass))
      tag.AddCssClass(css);
    result.AppendLine(tag.ToString());
  }
  return MvcHtmlString.Create(result.ToString());
}

Затем из представления вы совершаете такой вызов:

@Html.PageLinks(Model.TotalItems, Model.PageSize, Model.Page, "page_link", "active_page", x => Url.Action("MyList", "Home", new { page = x }))%>

По сути, я передаю функцию с правилом маршрутизации для генерации всех ссылок

Это мое правило в Global.asax

      routes.MapRoute("", "MyList/{page}", new { controller = "Home", action = "MyList", page = 0 }, new { page = @"\d+" });

Надеюсь, это поможет вам выполнить вашу задачу

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