0

ストアド プロシージャからレコードを返していますが、ビューでカスタム ページングを使用したいと考えています。これは私がこれまでに持っているものです:

コントローラ:

        public ActionResult Index(int currentPage=1, int PageNo = 1, int PageSize = 10, string SortColumn = "Name", string SortOrder = "Asc", string SearchString = "", int totalRecords=0)
    {
        DataContextDataContext obj = new DataContextDataContext();

        System.Nullable<int> Total = null;

        //PageCount = (int)Math.Ceiling((double)Total / PageSize);
        var model = obj.TempItemSubClassList(PageNo, PageSize, SortColumn, SortOrder, SearchString, ref Total).ToList();

        int PageCount = (int)(Total + PageSize - 1) / PageSize;


        StringBuilder sb1 = new StringBuilder();

        int seed = currentPage % PageSize == 0 ? currentPage : currentPage - (currentPage % PageSize);

        if (currentPage > 0)
            sb1.AppendLine(String.Format("<a href=\"{0}/{1}\">Previous</a>", SearchString, currentPage));

        if (currentPage - PageSize >= 0)
            sb1.AppendLine(String.Format("<a href=\"{0}/{1}\">...</a>", SearchString, (currentPage - PageSize) + 1));

        for (int i = seed; i < Math.Round((totalRecords / 10) + 0.5) && i < seed + PageSize; i++)
        {
            sb1.AppendLine(String.Format("<a href=\"{0}/{1}\">{1}</a>", SearchString, i + 1));
        }

        if (currentPage + PageSize <= (Math.Round((totalRecords / 10) + 0.5) - 1))
            sb1.AppendLine(String.Format("<a href=\"{0}/{1}\">...</a>", SearchString, (currentPage + PageSize) + 1));

        if (currentPage < (Math.Round((totalRecords / 10) + 0.5) - 1))
            sb1.AppendLine(String.Format("<a href=\"{0}/{1}\">Next</a>", SearchString, currentPage + 2));

        //Response.Write(sb1);////can/should I append this to the model?

        return View(model);
}

意見:

@model IEnumerable<ArtGuildMVC2.Models.TempItemSubClassListResult>

@{
ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
    <th>
        @Html.DisplayNameFor(model => model.ItemClassId)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.Description)
    </th>
    <th></th>
</tr>

@foreach (var item in Model) {
   <tr>
    <td>
        @Html.DisplayFor(modelItem => item.ItemClassId)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Description)
    </td>
    <td>
        @Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
        @Html.ActionLink("Details", "Details", new { id=item.Id }) |
        @Html.ActionLink("Delete", "Delete", new { id=item.Id })
    </td>
</tr>
 }
 </table>

/////What do I do hereafter????

 @{
 if (ViewBag.currentPage > 1) {
<a href="@Url.Action("index",new {page=1})">First</a>
<a href="@Url.Action("index",new {page=ViewBag.currentPage-1})">Prev</a>
}
if (ViewBag.currentPage < ViewBag.Total)
{
 <a href="@Url.Action("index",new {page=ViewBag.currentPage+1})">Next</a>
 <a href="@Url.Action("index",new {page=ViewBag.Total})">Last</a>
}}

ビューでページング ロジックを実装するにはどうすればよいですか? 前もって感謝します。PS: 2 ~ 3 か所からピックアップし、試行錯誤しながら機能させようとしているため、コードが非常に論理的であるとは思わないかもしれません。

4

1 に答える 1

1

Action メソッドに記述したコードによって、MVC パターンを破ろうとしていると言えます。

ちなみに、Paging はMvcPagingなどの一部のライブラリによって解決されているため、それらのいずれかを使用することを強くお勧めします。

于 2013-09-04T14:27:53.873 に答える