簡體   English   中英

使用viewmodel和actionlink時,無法在mvc4中應用分頁

[英]Unable to apply paging in mvc4 when using viewmodel and actionlink

嗨,我有一個鏈接按鈕。 當我點擊鏈接按鈕時,將顯示記錄數。 我想為此應用分頁。 我試過如下。

Index.cshtml

@foreach (var group in Model.records)
{
    <tr>                    
        <td>@Html.ActionLink(@group.clientId.ToString(), "detailsbyClientId", "DocumentVerification", new { clientId = @group.clientId.ToString()},null)</td>
        <td>@group.clientName</td>
        <td>@group.Count</td>
    </tr>
}

這是我的控制器代碼。

public ActionResult detailsbyClientId(int? clientId, int currentFilter, int? page)
{
    if (clientId != null)
    {
        page = 1;
    }
    else
    {
        clientId = currentFilter;
    }
    ViewBag.CurrentFilter = clientId;
    int pageSize = 8;
    int pageNumber = (page ?? 1);
    documentVerificationBAL objBAL = new documentVerificationBAL();
    int cId = Convert.ToInt32(clientId);
    List<detailsbyClientId> detailsbyclient = objBAL.detailsbyclient(cId);
    IPagedList<detailsbyClientId> pagedLog = detailsbyclient.ToPagedList(pageNumber, pageSize);

    detailsbyclientIdviewModel model;
    model = new detailsbyclientIdviewModel()
    {
        detailsbyclientId = pagedLog
    };
    return View("detailsbyClientId", model);
}

這是我的觀看代碼

@model  PagedList.IPagedList<c3card.DAL.detailsbyclientIdviewModel>
@using PagedList.Mvc;
@if(!Model.detailsbyclientId.Any())
{
<div>
    <table width="100%" border="0" cellspacing="0" cellpadding="0" class="dataTable tableHover">
        <tr>
            <th>Corporate Name</th>
            <th>employee ID</th>
            <th>employee Name</th>
            <th>Nationality</th>
            <th>Document Type</th>
            <th>Actions</th>
        </tr>
        @foreach (var group in Model.detailsbyclientId)
        {
            <tr>
                <td> @group.clientName </td>
                <td> @group.employeeId </td>
                <td> @group.employeeName </td>
                <td> @group.documentType </td>
                <td scope="col">
                    <input type="button" class="btn btn-primary btn-cons" value="View Document" onclick="showDocumentData('@group.upld_Id');" />
                </td>
                <td scope="col">
                    < input type="button" class="btn btn-primary btn-cons" value="Approve" onclick="showDocumentData('@group.upld_Id');" />
                </td>
                <td scope="col">
                    < input type="button" class="btn btn-primary btn-cons" value="Reject" onclick="showDocumentData('@group.upld_Id');" />
                </td>
            </tr>
        }
    </table>

    @Html.PagedListPager(Model, page => Url.Action("detailsbyClientId",
    new { page, currentFilter = ViewBag.CurrentFilter, pageSize = 5 }))
    Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount
</div>
}

我的viewmodel

public class detailsbyclientIdviewModel
    {
        public int upldId { get; set; }
        public IEnumerable<detailsbyClientId> detailsbyclientId { get; set; }
        public IEnumerable<Metadata> metadata { get; set; }
    }

我發送clientid to detailsbyclientid action方法。 如何從actionlink發送clientid作為currentfilter 我目前正在獲得可以為空的錯誤,因為我沒有發送當前的過濾器。 如果我在任何地方都錯了,請告訴我。 謝謝你

currentFilter的參數更改為int? (可以為空),然后你可以測試它是否為null 也不是你鏈接可以只是

<td>@Html.ActionLink(group.clientId.ToString(), "detailsbyClientId", "DocumentVerification", new { clientId = group.clientId },null)</td>

但是,代碼中還有多個其他錯誤會引發異常。

首先,返回視圖的模型是detailsbyclientIdviewModel ,因此視圖中的模型必須匹配

@model yourAssembly.detailsbyclientIdviewModel

接下來,您將PagedList分配給屬性detailsbyclientId因此您需要將模型更改為

public class detailsbyclientIdviewModel
{
    ....
    public IPagedList<detailsbyClientId> detailsbyclientId { get; set; }
}

這樣它就可以被@Html.PagedListPager()方法使用。

最后,您需要在尋呼機方法中引用該屬性

@Html.PagedListPager(Model.detailsbyclientId, page => Url.Action("detailsbyClientId",
    new { page, currentFilter = ViewBag.CurrentFilter, pageSize = 5 }))
Page @(Model.detailsbyclientId.PageCount < Model.detailsbyclientId.PageNumber ? 0 : Model.PageNumber) of @Model.detailsbyclientId.PageCount

話雖如此,當你從不使用該模型的int upldIdIEnumerable<Metadata> metadata時,還不清楚為什么你將detailsbyclientIdviewModel模型傳遞給視圖。 您可以將原始代碼保留在視圖和控制器中

IPagedList<detailsbyClientId> pagedLog = detailsbyclient.ToPagedList(pageNumber, pageSize);
return View("detailsbyClientId", pagedLog );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM