【问题标题】:Help on a custom razor HelperResult creation关于自定义剃须刀 HelperResult 创建的帮助
【发布时间】:2011-09-05 11:45:26
【问题描述】:

在我的 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>

我想为 &lt;div id="pager"&gt;&lt;/div&gt; 元素内的代码创建一个 HelperResult,这样我就不会重复自己,最重要的是,当我对该代码进行更改时,它会随处更改用过。

我还没有想出最好的主意。有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    对于我的使用,我实现了一个助手,它可以执行与您的请求类似的操作。我使用了其他一些变量,但我认为您明白了,可以根据您的需要获取我的代码并进行修改

    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+" });
    

    希望它能帮助你完成任务

    【讨论】:

      猜你喜欢
      • 2015-08-01
      • 2018-05-19
      • 1970-01-01
      • 2019-06-05
      • 1970-01-01
      • 1970-01-01
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多