c# - Unable to apply paging in mvc4 when using viewmodel and actionlink -
hi have 1 link button. when clicked on link button number of records displayed. want apply paging that. have tried below.
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> } this controller code.
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); } this 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> } my viewmodel
public class detailsbyclientidviewmodel { public int upldid { get; set; } public ienumerable<detailsbyclientid> detailsbyclientid { get; set; } public ienumerable<metadata> metadata { get; set; } } i sending clientid detailsbyclientid action method. how can send clientid currentfilter actionlink? getting nullable error because not sending current filter. let me know if wrong in place. thank lot
change parameter currentfilter int? (nullable), , can test if null or not. not link can just
<td>@html.actionlink(group.clientid.tostring(), "detailsbyclientid", "documentverification", new { clientid = group.clientid },null)</td> however there multiple other errors in code throw exceptions.
first, model returning view typeof detailsbyclientidviewmodel, therefore model in view must match
@model yourassembly.detailsbyclientidviewmodel next, assigning pagedlist property detailsbyclientid need change model to
public class detailsbyclientidviewmodel { .... public ipagedlist<detailsbyclientid> detailsbyclientid { get; set; } } so can used @html.pagedlistpager() method.
finally, need refer property in pager methods
@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 having said that, unclear why passing detailsbyclientidviewmodel model view when never use int upldid or ienumerable<metadata> metadata of model. keep original code in view , in controller
ipagedlist<detailsbyclientid> pagedlog = detailsbyclient.topagedlist(pagenumber, pagesize); return view("detailsbyclientid", pagedlog );
Comments
Post a Comment