0

私は初めてなASP.NET MVCので、これを解決するのを手伝ってください。一見、単純な問題です。

私は自分の上に学生のテーブルを持っていて、ViewそのLoad More下にリンクがあります。このリンクをクリックして、AJAX でより多くの学生のレコードを読み込む必要があります。

だからこれは私のView(不要なデータを省略)

<table id="studentTable">
    <thead>
        ...
    </thead>
    <tbody>
        @Html.Partial("_StudentDetailsList", Model)
    </tbody>
</table>
@Ajax.ActionLink("Load More", "LoadMoreStudents", new AjaxOptions
{
    HttpMethod = "POST",
    InsertionMode = InsertionMode.InsertAfter,
    UpdateTargetId = "studentTable"
})

_StudentDetailsList生徒を表示する部分ビュー

@model IEnumerable<MvcApplication1.Models.Student>
@foreach (var item in Model)
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.LastName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.FirstName)
        </td>
    </tr>
}

アクション

public ActionResult LoadMoreStudents(int skip = 0)
{
    return PartialView("_StudentDetailsList", studentRepository.Get(orderBy: s => s.OrderBy(st => st.FirstName).OrderBy(st => st.LastName)).Skip(skip).Take(10));
}

ご覧のとおり、毎回次の 10 人の生徒をロードしたいのですが、既にロードされている生徒数を知る必要があります。skipしたがって、問題は、に渡したいこのパラメーターをどこから取得する必要がActionあるかですViewViewすでに読み込まれている部分ビューの数と、各部分ビューに含まれる生徒の数をどのように数えることができますか? それとも、このパラメーターをアクションに渡すのは悪い習慣ですか? 他の場所 (サービスなど) で処理する必要がありますか? これを行う正しい方法をアドバイスしてください。ありがとう。

PS 適切なキャプションが思いつかないので、お気軽にキャプションを編集してください。

4

2 に答える 2

0

最も簡単な方法は、これらの変数を含むViewModelを作成することです。

ViewModel

public class YourViewModel(){

    public int skip {get;set;}

    public IEnumerable<StudentDetails> StudentDetailList {get;set;}

}

コントローラー/アクションメソッド

public ActionResult LoadMoreStudents(int skip = 0)
{
    return PartialView("_StudentDetailsList", new YourViewModel{
      StudentDetailList = studentRepository.Get(orderBy: s => s.OrderBy(st => st.FirstName).OrderBy(st => st.LastName)).Skip(skip).Take(10),
      skip = skip + 10});
}

ビュー @Html.Partial( "_ StudentDetailsList"、Model.StudentDetailList)

部分図

@model MvcApplication1.Models.YourViewModel
<table id="studentTable">
    <thead>
        ...
    </thead>
    <tbody>    
  @foreach (var item in Model.StudentDetailList)
   {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.LastName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.FirstName)
        </td>
    </tr>
}
    </tbody>
    </table>
    @Ajax.ActionLink("Load More", "LoadMoreStudents", new {skip = Model.skip}, new AjaxOptions
    {
        HttpMethod = "POST",
        InsertionMode = InsertionMode.InsertAfter,
        UpdateTargetId = "studentTable"
    })

基本的に、コントローラーから返される値でAjax.ActionLinkを動的に更新できる必要があります。ここでは、それをPartialViewに移動しました(おそらく、フェッチを含むテーブル全体をPartialViewに移動して、さらにクリーンにすることができます)。

于 2012-08-30T15:35:58.080 に答える