2

ユーザーのコメントを表示する Web ページがあります。最近の 10 件を表示するようにページをデフォルト設定しています。下部で、ユーザーが [Show More] をクリックすると、さらに 10 個のコメントが下に表示されます。ユーザーはボタンを複数回クリックでき、そのたびに 10 件のコメントが下部に表示されます。問題は、ユーザーがもう一度下にスクロールする必要があることです。アンカーを使用して、最後に表示されたコメントを選択したいと考えています。

私の見解では、私は持っています:

@{ int i = 1; }
@foreach (var item in Model) {
    <div class="Comment" id="Comment-@i">
        @Html.DisplayFor(modelItem => item.CommentText)
    </div>

    i++;
}

@{int numCommentsToDisplay = 10;}
@if (Session["numCommentsToDisplay"] != null) {
    numCommentsToDisplay = Convert.ToInt32(Session["numCommentsToDisplay"]); 
}

@Html.ActionLink("Show More", "Index", new { numCommentsToDisplay = numCommentsToDisplay + 10 })

そして私のコントローラーには以下が含まれています:

 public ActionResult Index(int numCommentsToDisplay = 10) {
     this.HttpContext.Session.Add("numCommentsToDisplay", numCommentsToDisplay.ToString());
     var latestComments = db.Comments.Take(numCommentsToDisplay).OrderByDescending(c => c.TimeStamp).ToList();

     return View(latestComments);
 }

ユーザーが初めて [もっと見る] をクリックすると、20 件のコメントが表示されます。11 件目のコメントを選択するにはどうすればよいですか? 私はすでにIDを設定しており、手動でナビゲートするとhttp://localhost:49208/Comment?numCommentsToDisplay=20#Comment-11うまくいきます

ありがとう

4

3 に答える 3

4

私は自分の質問を解決しました。

私はそれが仕事をするためのオーバーロードを見つけましたHtml.ActionLink():

public static MvcHtmlString ActionLink(
    this HtmlHelper htmlHelper,
    string linkText,
    string actionName,
    string controllerName,
    string protocol,
    string hostName,
    string fragment,
    Object routeValues,
    Object htmlAttributes
)

したがって、アンカーをフラグメントとして渡します。

@Html.ActionLink("Show More", 
                 "Index", 
                 "Comment",
                 null,
                 null, 
                 String.Format("Comment-{0}", numCommentsToDisplay + 1),
                 new { numCommentsToDisplay = numCommentsToDisplay + 10},
                 null
                 )

ここで答えを見つけました: ASP.NET MVC Html.ActionLink にアンカー タグを含める

ご意見をお寄せいただきありがとうございます

于 2012-10-08T19:59:18.590 に答える
0
@Html.ActionLink(
        "Show More",                        
        "Index",                    
        new { numCommentsToDisplay = numCommentsToDisplay + 10 },          
        new { name = string.Format("Comment-{0}",numCommentsToDisplay) }      
    )
于 2012-10-08T18:28:38.730 に答える
0

クライアントサイズのスクリプトを使用することをお勧めします。

あなたは MVC4 を使用しています。私の提案は、WebApi を活用することです。ページ化されたコメントを返し、Knockout.js を使用して結果をページにレンダリングするように API コントローラーを設定します。

于 2012-10-08T18:30:11.470 に答える