2014-01-29 27 views
-2

我有一个简单的分页系统。我在任何地方使用它,只需稍作更改我想制作一个类或dll文件并更一般地使用它。我不想重复自己。分页类DLL - 不要重复自己

我的控制器:

public ActionResult Index(int sayfa = 1) 
{ 
    int totalPage = Posts.Count(); 
    int postPerPage = 10; 
    int pageCount = totalPage/postPerPage; 
    if ((totalPage % postPerPage) > 0) 
    { 
     pageCount++; 
    } 
    ViewBag.PageCurrent = sayfa; 
    ViewBag.PageCount = pageCount; 
    Posts = (IOrderedQueryable<Post>)Posts.Skip(postPerPage * (sayfa - 1)).Take(postPerPage); 
    return View(Posts.ToList()); 
} 

我的观点:

<div class="pagination"> 
    @{ 
     int pageCurrent = ViewBag.PageCurrent; 
     int pageCount = ViewBag.PageCount; 

     if (pageCurrent != 1) 
     { 
      @Html.ActionLink(" ", "Index", "Post", new { sayfa = pageCurrent - 1 }, new { @class = "previous" }) 
     } 

     for (int i = 1; i <= pageCount; i++) 
     { 
      if (i == pageCurrent) 
      {    
       <a href="@Url.Action("Index", "Post", new { sayfa = i, })" style="background-color: #af3425">@i</a> 
      } 
      else 
      { 
       <a href="@Url.Action("Index", "Post", new { sayfa = i })">@i</a> 
      }  
     } 

     if (pageCurrent != pageCount) 
     { 
      @Html.ActionLink(" ", "Index", "Post", new { sayfa = pageCurrent + 1 }, new { @class = "next" }) 
     } 
    } 
    <br class="clear" /> 
</div> 

可能的变量,我可以在控制器改变:

int postPerPage = 10; (This is not so important) 

(Must-Have Changeable): 

Posts = (IOrderedQueryable<Post>)Posts.Skip(postPerPage * (sayfa - 1)).Take(postPerPage); 

return View(Posts.ToList()); 

可能的变量,我可以在视图改变:

@Url.Action("Index", "Post" .... (This is also must-have) 

我期望的使用:

IN CONTROLLER: 
Posts = Posts.ToMyCustomPagerClass() 

IN VIEW: 
@Html.Pagination() 

我怎么能这样做? 现在我创建了下面的类,但ViewBags是有问题的。错误:“ViewBag”这个名字不会在目前情况下

public static class ePager<T> 
{ 
    public static IOrderedQueryable<T> ePagedList(IOrderedQueryable<T> sinif, int page, int itemPerPage = 10) 
    { 
     int totalPage = sinif.Count(); 

     int pageCount = totalPage/itemPerPage; 
     if ((totalPage % itemPerPage) > 0) 
     { 
      pageCount++; 
     } 
     ViewBag.PageCurrent = page; 
     ViewBag.PageCount = pageCount; 
     sinif = (IOrderedQueryable<T>)sinif.Skip(itemPerPage * (page - 1)).Take(itemPerPage); 
     return sinif; 
    } 
} 
+0

我想让这段代码可重用。每次我需要“复制粘贴和编辑”。我想用这个代码。在CONTROLLER Posts = Posts.ToMyCustomPagerClass()和VIEW @ Html.Pagination()中。类似的东西 – Sacmalama

回答

0

创建一个包含你所需要的寻呼信息的基类的存在,并让您的视图模型从他们继承。在ViewBag周围传递寻呼信息根本不是非常干燥。

+0

我不使用视图模型。我的知识不太好。因此,我希望尽可能简化项目 – Sacmalama

+0

您正在传递“Post”对象列表。你想要做的就是创建一个类似'PagedViewModel '的类,其中T是你的'Post'。有'物品'的属性是'T'(你的'邮政')列表。在您的控制器中,获取帖子列表,创建PagedViewModel的新实例,并将项目设置为您的帖子。您可以将此视图模型用于其他页面,并封装分页详细信息。 –

+0

我编辑我的第一篇文章,并添加我的课程。除了ViewBag以外,一切都可以。我现在知道如何从我的课堂发送数据来查看 – Sacmalama