net mvc llenar ejemplos dropdownlist drop down asp c# asp.net asp.net-mvc razor drop-down-menu

c# - ejemplos - llenar dropdownlist mvc 5



Establecer el tamaño de la página de paginación DropDownList en la vista de afeitar (1)

Me gustaría hacer en mi asp.net la selección del tamaño de página del formulario web con la lista desplegable. En realidad, ya lo hice, pero cuando cambio el tamaño de página de mi lista desplegable no cambia nada. Supongo que necesito escribir algo extra en mi controlador, ¿o tal vez mi View está mal?

Mi vista 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))

Y este es mi controlador. Aquí no agregué nada con respecto a DropDownList:

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


Debe incluir la lista desplegable dentro de sus etiquetas <form> para que su valor se envíe al método del controlador, y ese método también necesita un parámetro adicional para vincularse al valor. También debe incluir el valor seleccionado en Html.PagedListPager() para que se conserve cuando vaya a otra página.

No ha mostrado su modelo TimeReportViewMod , pero sí que contiene las propiedades IEnumerable<User> e IPagedList<User> , que también es IEnumerable<User> por lo que la primera es innecesaria. Pero lo que debe contener son las propiedades que utiliza para buscar y filtrar, de modo que puede vincularse fuertemente con sus propiedades y evitar el uso de ViewBag . Debería verse como

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

Nota: No está claro para qué es sortOrder , nunca lo usas en ninguna parte. Ni usa el valor de searchString / currentFilter en su consulta.

Entonces tu método de control es

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

y en la vista

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