0

コメントのリストを作成しました。クライアントは10件のコメントごとに新しいページを必要としているため、コメント11は2ページに表示され、以下同様にページ数が増えます。コメットは、通常の.aspx.csページで発生した問題のために.ashxページで形成されます。簡単に言えば、どうすればこれを達成できますか?

.ashxページのコードは次のとおりです。

public void ProcessRequest (HttpContext context) 
{

    // ****************************************
    if (context.Request["postform"] == "1")
    {

        videomessage myVideoMessage = new videomessage();

        myVideoMessage.video_id = context.Request["video_id"];
        myVideoMessage.first_name_submitter = context.Request["first_name_submitter"];
        myVideoMessage.last_initial_submitter = context.Request["last_initial_submitter"];
        myVideoMessage.message = context.Request["message"];
        myVideoMessage.status = "0";

        myVideoMessage.Save();
    }
    // ****************************************

    // ****************************************
    StringBuilder myStringBuilder = new StringBuilder();


    // PULL VIDEOMESSAGES FOR VIDEO_ID
    videomessage[] myCommentsList = new videomessage().Listing("video_id", context.Request["video_id"], "entry_date" , "DESC");

    // FORM COMMENTS IF MORE THAN ONE COMMENT EXISTS
    foreach (videomessage tmpMessage in myCommentsList)
    {
        if (tmpMessage.status == "0" || tmpMessage.status == "1")
        {
            myStringBuilder.Append("<div class=\"comment_box\">");
            myStringBuilder.Append("<p class=\"comment_date\">");
            myStringBuilder.Append(Utility.FormatShortDate(tmpMessage.entry_date) + " " + tmpMessage.first_name_submitter + " " + tmpMessage.last_initial_submitter + "." + "</p>");

            if (!String.IsNullOrEmpty(tmpMessage.message))
            {
                myStringBuilder.Append("<p>" + tmpMessage.message + "</p>");
                myStringBuilder.Append("</div>");
            }
        }
    }
    string return_str = myStringBuilder.ToString();

    // IF NO COMMENTS RETURN THIS
    if( String.IsNullOrEmpty(return_str) )  return_str = "<p>No comments currently exist for this video.</p>";
    // ****************************************

    // RETURN STRING        
    context.Response.ContentType = "text/plain";
    context.Response.Write(return_str);
}

変数に割り当てるだけでなく、いくつかの数学が必要になることはわかっていますが、私はまだ.NETに慣れていないので、助けていただければ幸いです。

前もって感謝します!

4

2 に答える 2

2

Linqを使用する

const int pageSize = 10;
var paginatedComments = comments.Skip((page ?? 0) * pageSize).Take(pageSize).ToList();

(*)ページはリクエストから入力されます

少し時代遅れかもしれませんが、カスタムPaginatedListクラスを使用したMVCのページ付けの原則を説明しているnerddinnerチュートリアル( http://aspnetmvcbook.s3.amazonaws.com/aspnetmvc-nerdinner_v1.pdf )をご覧ください。

    public class PaginatedList<T> : List<T> {
        public int PageIndex  { get; private set; }
        public int PageSize   { get; private set; }
        public int TotalCount { get; private set; }
        public int TotalPages { get; private set; }

        public PaginatedList(IQueryable<T> source, int pageIndex, int pageSize) {
             PageIndex = pageIndex;
             PageSize = pageSize;
             TotalCount = source.Count();
             TotalPages = (int) Math.Ceiling(TotalCount / (double)PageSize);
             this.AddRange(source.Skip(PageIndex * PageSize).Take(PageSize));
        }

        public bool HasPreviousPage {
           get {
              return (PageIndex > 0);
           }
        }

        public bool HasNextPage {
            get {
               return (PageIndex+1 < TotalPages);
            }
        }
   }

別の解決策はjqueryアプローチを使用することです(http://www.jquery4u.com/plugins/10-jquery-pagination-pluginsを参照)が、このサイトで提案されているプラ​​グインのいずれも使用した経験がありません。

于 2012-09-21T14:35:10.077 に答える
1

これを見てください

currentPage=1
NextPageFirstRecord=(currrentpage-1)*noRecordsPerPage
pageCount=totalrecords/noRecordsPerPage

お役に立てれば

于 2012-09-21T14:02:27.493 に答える