2016-04-11 43 views
3

Açılır listeden asp.net web form sayfa boyutu seçimimi yapmak istiyorum. Aslında bunu zaten yaptım, ancak sayfa boyutumu açılan listeden değiştirdiğimde hiçbir şey değişmiyor. Denetleyicime fazladan bir şey yazmam gerek, ya da belki View'm yanlış mı?Sayfa belirleme boyutu sayfa boyutunu belirle DropDownList in jilet View

Benim Index.cshtml görünümü:

@model TimeReportingWebApp.TimeReportViewMod 
@using PagedList.Mvc; 
.... 
@using (Html.BeginForm("Index", "Users")) 
{ 
    <p> 
     Find by name: @Html.TextBox("SearchString", ViewBag.CurrentFilter as string) 
     <input type="submit" class="btn btn-primary" value="Search" /> 
    </p> 
} 
<table class="table"> 
    <tr> 
     <th>@Html.ActionLink("Login","Index", new { sortOrder = ViewBag.LoginSortParm, currentFilter = ViewBag.CurrentFilter })</th> 
    </tr> 
    @foreach (var item in Model.Model2) { 
     <tr> 
      <td>@Html.DisplayFor(modelItem => item.Login)</td> 
     </tr> 
    } 
</table> 

Page @(Model.Model2.PageCount < Model.Model2.PageNumber ? 0 : Model.Model2.PageNumber) of @Model.Model2.PageCount 
@Html.PagedListPager(Model.Model2, page => Url.Action("Index", 
    new { page, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter })) 

Select page size @Html.DropDownList("PageSize", new SelectList(new Dictionary<string, int> { { "10", 10 }, { "20", 20 }, { "100", 100 } }, "Key", "Value", Model.Model2.Count)) 

Ve bu benim denetleyicisi olduğunu. İşte DropDownList ile ilgili bir şey ilave etmedi:

değeri denetleyici yöntemine gönderilen ve bu yöntem, aynı zamanda değere bağlamak için ek bir parametre ihtiyacı olduğu böylece Sen <form> etiketleri içinde DropDownList eklemeniz gerekir
public ActionResult Index(string sortOrder, string currentFilter, string searchString, int? page) 
{ 
    ViewBag.CurrentSort = sortOrder; 
    if (searchString != null) 
    { 
     page = 1; 
    } 
    else 
    { 
     searchString = currentFilter; 
    } 
      ViewBag.CurrentFilter = searchString; 
    var users = from s in db.Users.Include(u => u.CustomerProject).Include(u => u.Service).Include(u => u.Customer) select s; 
    int pageSize = 20; 
    int pageNumber = (page ?? 1); 
    var inst = new TimeReportViewMod(); 
    inst.Model1 = users.ToList(); 
    inst.Model2 = users.ToPagedList(pageNumber, pageSize); 
    return View("Index", inst); 
} 
+0

DropDownList yok göstermiştir görünüm içinde! –

+0

@StephenMuecke @ Html.DropDownList ("PageSize", yeni SelectList (yeni Sözlük {{"10", 10}, {"20", 20}, {"100", 100}}, "Anahtar", "Değer ", Model.Model2.Count)) – BinaryTie

+0

Bu formda değil - hiçbir şey geri göndermeyecek.

'etiketleri arasında olması gerekir. Ve sonra denetleyici yönteminizde bir parametre gerekir - 'int pageSize'. –

cevap

1

. Ayrıca, seçilen değeri Html.PagedListPager()'a eklemeniz gerekir, böylece başka bir sayfaya gittiğinizde korunur.

Sen TimeReportViewMod modeli olmadığını göstermiştir, ancak od o kadar ilki gereksizdir de IEnumerable<User> olduğu özelliklere IEnumerable<User> ve IPagedList<User> içerdiğini. Ancak içerdiği özellikler, arama ve filtreleme için kullandığınız özelliklerdir, böylece özelliklerinizi güçlü bir şekilde bağlayabilir ve ViewBag kullanımını engelleyebilirsiniz. Bu

public class TimeReportVM 
{ 
    [Display(Name = "Find by name")] 
    public string SearchString { get; set; } 
    public string SortOrder { get; set; } 
    [Display(Name = "Select page size")] 
    public int PageSize { get; set; } 
    public SelectList PageSizeList { get; set; } 
    public IPagedList<User> Users { get; set; } 
} 

Not gibi görünmelidir: Its net değil sortOrder için ne - hiçbir yerde hiç kullanmıyorum. Siz hiç de sorgunuzda searchString/currentFilter değerini kullanırsınız.

Sonra denetleyici yöntem

public ActionResult Index(string sortOrder, string searchString, int pageSize, int? page) 
{ 
    if (searchString != null) 
    { 
     page = 1; 
    } 
    // this query should be taking into account the values of sortOrder and searchString? 
    var users = from s in db.Users.Include(u => u.CustomerProject).Include(u => u.Service).Include(u => u.Customer) select s; 
    TimeReportVM model = new TimeReportVM() 
    { 
     SortOrder = sortOrder, 
     SearchString = searchString, 
     PageSize = pageSize, 
     PageSizeList = new SelectList(new int[]{ 10, 20, 100 }), 
     Users = users.ToPagedList(page ?? 1, pageSize); 
    }; 
    return View(model); 
} 

ve görünümü

@model TimeReportingWebApp.TimeReportViewMod 
@using PagedList.Mvc; 
.... 
@using (Html.BeginForm()) 
{ 
    @Html.LabelFor(m => m.SearchString) 
    @Html.TextBoxFor(m => m.SearchString) 
    @Html.LabelFor(m => m.PageSize) 
    @Html.DropDownListFor(m => m.PageSize, Model.PageSizeList) 
    <input type="submit" class="btn btn-primary" value="Search" /> 
} 
.... 
Page @(Model.Users.PageCount < Model.Users.PageNumber ? 0 : Model.Users.PageNumber) of @Model.Users.PageCount 
@Html.PagedListPager(Model.Users, page => Url.Action("Index", 
    new { page, sortOrder = Model.SortOrder, searchString = Model.SearchString, pageSize = Model.PageSize }))