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

Popular posts from this blog

amazon web services - S3 Pre-signed POST validate file type? -

c# - Check Keyboard Input Winforms -