c# - net - تعيين حجم الصفحة الترحيل دروبدونليست في الحلاقة مشاهدة



html helper method dropdownlist (1)

أود أن تجعل في بلدي asp.net شكل صفحة ويب اختيار حجم مع القائمة المنسدلة. في الواقع أنا جعلت ذلك بالفعل، ولكن عندما أغير حجم الصفحة من قائمتي المنسدلة ليس هناك تغيير أي شيء. أعتقد أنني بحاجة إلى كتابة شيء إضافي في وحدة تحكم بلدي، أو ربما وجهة نظري هو الخطأ؟

عرض index.cshtml:

@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))

وهذا هو بلدي تحكم. هنا لم أضف أي شيء بشأن دروبدونليست:

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);
}

يجب تضمين القائمة المنسدلة ضمن علامات <form> بحيث يتم إرسال قيمته إلى أسلوب وحدة التحكم، كما أن هذه الطريقة تحتاج إلى معلمة إضافية للربط بالقيمة. يجب أيضا تضمين القيمة المحددة في Html.PagedListPager() بحيث يتم الاحتفاظ بها عند الانتقال إلى صفحة أخرى.

لم تظهر نموذج TimeReportViewMod الخاص بك، ولكن أود أنه يحتوي على خصائص IPagedList<User> IEnumerable<User> و IPagedList<User> ، والذي هو أيضا IEnumerable<User> لذلك أول واحد غير ضروري. ولكن ما يجب أن يحتوي عليه هو الخصائص التي تستخدمها للبحث والتصفية بحيث يمكنك ربط بقوة إلى الممتلكات الخاصة بك وتجنب استخدام ViewBag . يجب أن تبدو

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; }
}

ملاحظة: ليس واضحا ما sortOrder هو ل - أنت أبدا استخدامه في أي مكان. ولا تستخدم أي وقت مضى قيمة searchString / currentFilter في الاستعلام.

ثم كنت طريقة تحكم هو

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);
}

وفي الرأي

@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 }) )




drop-down-menu