Добавление функций подкачки и сортировки с использованием Ajax и MvcContrib Grid - PullRequest
0 голосов
/ 07 августа 2011

Я использую MvcContrib Grid control в своем приложении MVC. Следуя примеру из книги Pro * ASP.NET MVC, я создал следующий класс и помощник по подкачке страниц

открытый класс PagingInfo

{
    public int TotalItems { get; set; }
    public int ItemsPerPage { get; set; }
    public int CurrentPage { get; set; }
    public int TotalPages
    {
        get { return (int)Math.Ceiling((decimal)TotalItems / ItemsPerPage); }
    }

public static class PagingHelpers
{
    public static MvcHtmlString PageLinks(this HtmlHelper html,
                                          PagingInfo pagingInfo,
                                          Func<int, string> pageUrl)
    {

        StringBuilder result = new StringBuilder();
        for (int i = 1; i <= pagingInfo.TotalPages; i++)
        {
            TagBuilder tag = new TagBuilder("a"); // Construct an <a> tag

            tag.MergeAttribute("href", pageUrl(i));

            tag.InnerHtml = i.ToString();

            if (i == pagingInfo.CurrentPage)
                tag.AddCssClass("selected");
            result.AppendLine(tag.ToString());
        }
        return MvcHtmlString.Create(result.ToString());
    }
}

На мой взгляд, у меня есть следующее:

Страница: @ Html.PageLinks (ViewBag.Paging как PagingInfo, i => Url.Action ("Index", new {pageNo = i}))
 @Html.DropDownList("pageSize", new SelectList(new[] { "2", "25", "50", "75", "100", "200" }), "-Select-", new { @style = "width:75px" })   

1) Как отправить в pageSize (который является числом строк) класс помощника с помощью Url.Action?

2) Я также определил следующую функцию для включения ajax. Это эффективный способ сделать это? Я собирался использовать аналогичную функцию для оценки. Так что ваши взгляды будут оценены.

$ ("# pageLinks a"). Live ("click", function () {

    $.get($(this).attr("href"), function(response) {
        $("#Grid").replaceWith(response); 
    });

    return false;


});

Спасибо,

1 Ответ

0 голосов
/ 23 августа 2011

В случае, если у кого-то еще есть такая же проблема, с отправкой в ​​дополнительных параметрах.Я изменил свою вспомогательную функцию html следующим образом: -

public static MvcHtmlString PageLinks(this HtmlHelper html,
                                              PagingInfo pagingInfo,
                                              Func<int, int, string> pageUrl)
        {

            StringBuilder result = new StringBuilder();
            for (int i = 1; i <= pagingInfo.TotalPages; i++)
            {
                TagBuilder tag = new TagBuilder("a"); // Construct an <a> tag

                tag.MergeAttribute("href", pageUrl(i, pagingInfo.ItemsPerPage));

                tag.InnerHtml = i.ToString();

                if (i == pagingInfo.CurrentPage)
                    tag.AddCssClass("selected");
                result.AppendLine(tag.ToString());
            }
            return MvcHtmlString.Create(result.ToString());
        }

И теперь я вызываю функцию следующим образом:

Page: @Html.PageLinks( ViewBag.Paging as PagingInfo, (i, j) => Url.Action("Index", new{pageNo = i, pageSize= j}))  

It works a treat now.  Must RTFM more.  Thanks to the Plural Sight videos for helping me resolve this one. 

Спасибо,

...