使用 viewmodel 和 actionlink 时无法在 mvc4 中应用分页
Unable to apply paging in mvc4 when using viewmodel and actionlink
您好,我有一个 link 按钮。当我单击 link 按钮时,将显示记录数。我想为此申请分页。我试过如下。
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);
}
这是我的viewcode
@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>
}
我的视图模型
public class detailsbyclientIdviewModel
{
public int upldId { get; set; }
public IEnumerable<detailsbyClientId> detailsbyclientId { get; set; }
public IEnumerable<Metadata> metadata { get; set; }
}
我正在将 clientid 发送到 detailsbyclientid 操作方法。如何从 actionlink 发送 clientid
作为 currentfilter
?我目前收到可为空的错误,因为我没有发送当前过滤器。如果我在任何地方错了,请告诉我。非常感谢
将 currentFilter
的参数更改为 int?
(可为空),然后您就可以测试它是否为 null
。也不是说你 link 可以只是
<td>@Html.ActionLink(group.clientId.ToString(), "detailsbyClientId", "DocumentVerification", new { clientId = group.clientId },null)</td>
但是,您的代码中还有多个其他错误会引发异常。
首先,你返回视图的模型是typeofdetailsbyclientIdviewModel
,因此视图中的模型必须匹配
@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
话虽如此,但不清楚为什么您将 detailsbyclientIdviewModel
模型传递给视图,而您从不使用该模型的 int upldId
或 IEnumerable<Metadata> metadata
。您可以将原始代码保留在您的视图和控制器中
IPagedList<detailsbyClientId> pagedLog = detailsbyclient.ToPagedList(pageNumber, pageSize);
return View("detailsbyClientId", pagedLog );
您好,我有一个 link 按钮。当我单击 link 按钮时,将显示记录数。我想为此申请分页。我试过如下。
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);
}
这是我的viewcode
@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>
}
我的视图模型
public class detailsbyclientIdviewModel
{
public int upldId { get; set; }
public IEnumerable<detailsbyClientId> detailsbyclientId { get; set; }
public IEnumerable<Metadata> metadata { get; set; }
}
我正在将 clientid 发送到 detailsbyclientid 操作方法。如何从 actionlink 发送 clientid
作为 currentfilter
?我目前收到可为空的错误,因为我没有发送当前过滤器。如果我在任何地方错了,请告诉我。非常感谢
将 currentFilter
的参数更改为 int?
(可为空),然后您就可以测试它是否为 null
。也不是说你 link 可以只是
<td>@Html.ActionLink(group.clientId.ToString(), "detailsbyClientId", "DocumentVerification", new { clientId = group.clientId },null)</td>
但是,您的代码中还有多个其他错误会引发异常。
首先,你返回视图的模型是typeofdetailsbyclientIdviewModel
,因此视图中的模型必须匹配
@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
话虽如此,但不清楚为什么您将 detailsbyclientIdviewModel
模型传递给视图,而您从不使用该模型的 int upldId
或 IEnumerable<Metadata> metadata
。您可以将原始代码保留在您的视图和控制器中
IPagedList<detailsbyClientId> pagedLog = detailsbyclient.ToPagedList(pageNumber, pageSize);
return View("detailsbyClientId", pagedLog );