tnacer Ответов: 1

ASP.NET MVC свободный фильтр serach при пейджинге


Привет,

Я новичок в asp.net в MVC бритвы.
У меня есть форма поиска с несколькими serach creteria (текстовое поле и выпадающий список).

Моя ошибка заключается в том, что когда я фильтрую, например, свою таблицу, которая изначально содержит 100 строк, она дает мне 50 строк. Но когда я нажимаю на вторую страницу (номер 2 в подкачке), я теряю фильтрацию, и выделения в моих 3 выпадающих списках равны нулю ( я теряю выделение в моем 3 выпадающих списках, так что все параметры становятся нулевыми.)... так что это дает мне снова 100 строк.

Я попробовал эту статью, но ничего не понял .

Пример для перечисления, сортировки, поиска данных и добавления разбиения на страницы в ASP.Net MVC 5[^]



Пожалуйста помочь. Спасибо.

--========================================================================
-- Контроллер
--========================================================================
public ActionResult Index(string sortOrder, string currentFilter, int? page, string EtablissementCode, string ClarderSousSecteur, string SearchString, int AnneeUniversitaire = 20122013)
        {
            ViewBag.CurrentSort = sortOrder;
            ViewBag.ClarderSousSecteurSortParm = String.IsNullOrEmpty(sortOrder) ? "ClarderSousSecteur_desc" : "ClarderSousSecteur_asc";

            if (SearchString != null)
            {
                page = 1;
            }
            else
            {
                SearchString = currentFilter;
            }
            ViewBag.CurrentFilter = SearchString;

            ViewBag.AnneeUniversitaire = new SelectList(db.tblAnneeDeclarations, "AnneeDeclarationCode", "AnneeDeclarationCode", AnneeUniversitaire);

            ViewBag.EtablissementCode = new SelectList(db.tblEtablissements, "EtablissementCode", "EtablissementCode", EtablissementCode);

            ViewBag.ClarderSousSecteur = new SelectList(db.tblClarderSousSecteur, "ClarderSousSecteurCode", "ClarderSousSecteurLibelle", ClarderSousSecteur);

            // Liste principale
            var USUAs = from m in db.tblUSUAs
                        join c in db.tblClarderSousSecteur on m.ClarderSousSecteurID equals c.ClarderSousSecteurID
                        select new USUAModel { USUAID = m.USUAID, USUACode = m.USUACode, USUALibelle = m.USUALibelle, AnneeUniversitaire = m.AnneeUniversitaire, EtablissementCode = m.EtablissementCode, ClarderSousSecteurID = c.ClarderSousSecteurID, ClarderSousSecteurCode = c.ClarderSousSecteurCode, ClarderSousSecteurLibelle = c.ClarderSousSecteurLibelle };

            if (!String.IsNullOrEmpty(SearchString))
            {
                USUAs = USUAs.Where(s => s.USUALibelle.ToUpper().Contains(SearchString.ToUpper())); //s => s.USUALibelle.Contains(SearchString));
            }

            if (!String.IsNullOrEmpty(AnneeUniversitaire.ToString()))
            {
                USUAs = USUAs.Where(y => y.AnneeUniversitaire == AnneeUniversitaire);
            }

            if (!String.IsNullOrEmpty(EtablissementCode))
            {
                USUAs = USUAs.Where(x => x.EtablissementCode == EtablissementCode);
            }

            if (!String.IsNullOrEmpty(ClarderSousSecteur))
            {
                USUAs = USUAs.Where(v => v.ClarderSousSecteurCode == ClarderSousSecteur);
            }

            switch (sortOrder)
            {
                case "ClarderSousSecteur_desc":
                    USUAs = USUAs.OrderByDescending(s => s.ClarderSousSecteurID);
                    break;
                case "ClarderSousSecteur_asc":
                    USUAs = USUAs.OrderBy(s => s.ClarderSousSecteurID);
                    break;
                default:
                    USUAs = USUAs.OrderBy(s => s.ClarderSousSecteurID);
                    break;
            }

            int pageSize = 10;
            int pageNumber = (page ?? 1);
            return View(USUAs.ToPagedList(pageNumber, pageSize));
        }

--========================================================================
-- Вид
--========================================================================
@model PagedList.IPagedList<mvcapptablesreference.models.usuamodel>
@using PagedList.Mvc; 
<link href="~/Content/PagedList.css" rel="stylesheet" type="text/css" />
<link href="~/Content/Site.css" rel="stylesheet" type="text/css" />

@{
    ViewBag.Title = "USUAs destination";
}

<h2>Index</h2>
Votre recherche a retourné : @Model.Count() enregistrements

<p>
    @Html.ActionLink("Créer une nouvelle USUA", "Create")

    @using (Html.BeginForm("Index", "tblUSUAs", FormMethod.Get))
    {
    <p>
        Année universitaire : @Html.DropDownList("AnneeUniversitaire", (SelectList)ViewBag.AnneeUniversitaire)
           Etablissement : @Html.DropDownList("EtablissementCode", (SelectList)ViewBag.EtablissementCode)
           Clarder sous secteur : @Html.DropDownList("ClarderSousSecteur", (SelectList)ViewBag.ClarderSousSecteur)
    </p>
    <p>
        USUA : @Html.TextBox("SearchString", ViewBag.CurrentFilter as string)
        <input type="submit" value="Filter" />
    </p>
    }

</p>

<table class="table">
    <tr>
        <th></th>
        <th>
            Code
        </th>
        <th>
            Libelle
        </th>
        <th>
            Etab.
        </th>
        <th>
            Année
        </th>
        <th>
@Html.ActionLink("S-Secteur", "Index", new { sortOrder = ViewBag.ClarderSousSecteurSortParm })
        </th>
    </tr>

@foreach (var item in Model)
{
    <tr>
        <td>
            @Html.ActionLink("Editer", "Edit", new { id=item.USUAID }) |
            @Html.ActionLink("Details", "Details", new { id=item.USUAID }) |
            @Html.ActionLink("Supprimer", "Delete", new { id=item.USUAID })
        </td>
        <td>
			@item.USUACode
        </td>
        <td>
			@item.USUALibelle
        </td>
        <td>
			@item.EtablissementCode
        </td>
        <td>
			@item.AnneeUniversitaire
        </td>
        <td>
            @item.ClarderSousSecteurLibelle
        </td>
    </tr>
}

</table>

<br /> Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) de @Model.PageCount

@Html.PagedListPager(Model, page => Url.Action("Index", new { page, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter}))</mvcapptablesreference.models.usuamodel>

Afzaal Ahmad Zeeshan

Пожалуйста, правильно отформатируйте свой код.

Anil Shrestha

Лучший из них.

1 Ответов

Рейтинг:
0

ntuthuko-m

Привет,
Похоже, вы забыли передать другие фильтры в представление razor в разделе подкачки. Единственный фильтр поиска, который у вас есть в ссылке подкачки, - это:

ViewBag.CurrentFilter


Вам нужно включить выбранные значения из раскрывающегося списка в коллекцию ViewBag и передать их в представление так же, как вы сделали это для переменной "CurrentFilter".