2

我已经在我的 MVC3 应用程序中实现了分页。单击每个页码后,会发生回发并正确显示请求的页面。

以下是我的扩展代码 -

public static string PageLinks(this HtmlHelper html, PageLinks pagelinks, Func<int, string> pageUrl)
        {
            StringBuilder result = new StringBuilder();
            int startFrom;
            //Previous Page link
            int divi = (int)pagelinks.Current / pagelinks.PageLinksToDisplay;
            if (divi > 0)
            {
                TagBuilder tag = new TagBuilder("a"); // Construct an <a> tag
                tag.MergeAttribute("href", pageUrl((divi * pagelinks.PageLinksToDisplay) - 1));
                tag.InnerHtml = "Prev";
                result.AppendLine(tag.ToString());
            }
            if (divi > 0)
            {
                startFrom = (divi * pagelinks.PageLinksToDisplay);
            }
            else
            {
                startFrom = (divi * pagelinks.PageLinksToDisplay) + 1;
            }
            int endOn = (startFrom + pagelinks.PageLinksToDisplay);
            if (endOn > pagelinks.Total + 1)
                endOn = pagelinks.Total + 1;

            for (int i = startFrom; i < endOn; i++)
            {
                TagBuilder tag = new TagBuilder("a"); // Construct an <a> tag
                tag.MergeAttribute("href", pageUrl(i));
                tag.InnerHtml = i.ToString();
                if (i == pagelinks.Current)
                    tag.AddCssClass("selected");
                result.AppendLine(tag.ToString());
            }

            if (endOn < pagelinks.Total)
            {
                TagBuilder tag = new TagBuilder("a"); // Construct an <a> tag
                tag.MergeAttribute("href", pageUrl(endOn));
                tag.InnerHtml = "Next";
                result.AppendLine(tag.ToString());
            }
            return result.ToString();
        } 

下面是我的视图实现分页的源代码 -

<!-- Paging Strip -->
           <div class="PagerDiv">
                <div class="pagerCurrent">
                <%
                    int? currentPgNo = Model.Pager.Current;
                    int totalItems = Model.Pager.TotalItemCount;
                    int displayRecs = Model.Pager.PageSize;
                %>
                    Showing  <%=(currentPgNo * displayRecs) - (displayRecs - 1)%> - 
                    <%=(currentPgNo * displayRecs < totalItems ? currentPgNo * displayRecs : totalItems)%>
                    out of <%=totalItems%> 
                </div>
                <div class="pager">
                    <%=Html.PageLinks(Model.Pager, x => Url.Action("Index", new { Current = x }))%>
                </div>
                <div class="options">

                    Sort By : <%:Html.DropDownListFor(m=>m.SortBy, Model.SortOptions, new { onchange = "this.form.submit();" })%>
                </div>
            </div>
           <!-- End Paging-->

下面是输出 - 寻呼机

问题 :-

到目前为止,一切都很好。我面临着新的困难。我有一个 Div 视图,其中数据通过 json 呈现。我将我的部分视图之一渲染为 Json。这个局部视图显示了一个需要实现分页的列表。我不想回发,而是需要在 Div 中显示新渲染的 json。

编码

<%=Html.PageLinks(Model.Pager, x => Url.Action("Index", new { Current = x }))%>

实际上生成编号框,我想要的是在这些编号框上附加一个 JS 函数而不是一个 url。

我试过了

<%=Html.JQueryPageLinks(Model.Pager, x => "MyJSFunction(" + x + ")")%>

其中 x 代表页码。创建另一个扩展,但似乎没有运气。

这是代码 -

public static string JQueryPageLinks(this HtmlHelper html, PageLinks pagelinks, string jQryFn)
        {
            StringBuilder result = new StringBuilder();
            int startFrom;
            //Previous Page link
            int divi = (int)pagelinks.Current / pagelinks.PageLinksToDisplay;
            if (divi > 0)
            {
                TagBuilder tag = new TagBuilder("a"); // Construct an <a> tag
                //tag.MergeAttribute("href", pageUrl((divi * pagelinks.PageLinksToDisplay) - 1));
                tag.Attributes.Add("onclick", jQryFn);
                tag.InnerHtml = "Prev";
                result.AppendLine(tag.ToString());
            }
            if (divi > 0)
            {
                startFrom = (divi * pagelinks.PageLinksToDisplay);
            }
            else
            {
                startFrom = (divi * pagelinks.PageLinksToDisplay) + 1;
            }
            int endOn = (startFrom + pagelinks.PageLinksToDisplay);
            if (endOn > pagelinks.Total + 1)
                endOn = pagelinks.Total + 1;

            for (int i = startFrom; i < endOn; i++)
            {
                TagBuilder tag = new TagBuilder("a"); // Construct an <a> tag
                //tag.MergeAttribute("href", pageUrl(i));
                tag.Attributes.Add("onclick", jQryFn);
                tag.InnerHtml = i.ToString();
                if (i == pagelinks.Current)
                    tag.AddCssClass("selected");
                result.AppendLine(tag.ToString());
            }

            if (endOn < pagelinks.Total)
            {
                TagBuilder tag = new TagBuilder("a"); // Construct an <a> tag
                //tag.MergeAttribute("href", pageUrl(endOn));
                tag.Attributes.Add("onclick", jQryFn);
                tag.InnerHtml = "Next";
                result.AppendLine(tag.ToString());
            }
            return result.ToString();
        }

有人可以帮我解决这个问题。感谢您分享您宝贵的时间和智慧。

编辑: 在最简单的情况下,我希望 JS 函数调用页码而不是 url。例如。
单击 1 将调用 MyJSFunction(1),单击 2 将调用 MyJSFunction(2) 等等...

4

1 回答 1

0

这是我不久前写的(很糟糕!),可能会有所帮助。它用查询的结果替换指定的 div

        <div id="placeholder">
        <br />Enter your email address below.....<br /><br />
        <% using (Ajax.BeginForm("VoucherRequest", "Intro", new AjaxOptions { UpdateTargetId = "placeholder", InsertionMode = InsertionMode.Replace, HttpMethod = "Post" }))    
        {%>
            First Name: <%: Html.TextBox("txtFirstName", "", new { style = "width:50%" })%><br /><br />
            Last Name: <%: Html.TextBox("txtLastName", "", new { style = "width:50%" })%><br /><br />
            Your Email: <%: Html.TextBox("txtEmail", "", new { style = "width:50%" })%><br /><br />
            <input type="submit" value="Submit" />
            <br /><br />
            <%: Html.CheckBox("OptIn", false) %> ....
        </div>
于 2013-03-13T09:37:52.300 回答