попытка фильтрации в контроллере не работает - PullRequest
0 голосов
/ 14 декабря 2018

Я создал модель, создав леса для своей базы данных, а затем создал контроллер с помощью ядра инфраструктуры сущностей

Затем я пытаюсь создать фильтр для поля FullName в методе Index в контроллере, напримерthis:

public async Task<IActionResult> Index(string searchString)
{
    var nozContext = _context.NzAll.Include(n => n.CodeKNavigation).Include(n => n.CodeKhNavigation).Include(n => n.CodeMrNavigation).Include(n => n.CodeSexNavigation).Include(n => n.HalaNavigation);
    ViewData["CurrentFilter"] = searchString;
    var nzAllIQ = from s in _context.NzAll
                         select s;
    if (!String.IsNullOrEmpty(searchString))
    {
       nzAllIQ = nzAllIQ.Where(s => s.FullName.Contains(searchString));
    }
    return View(await nozContext.ToListAsync());
}

Затем я помещаю эту форму в index.cshtml:

<form asp-action="index" method="get">
   <div class="form-actions no-color">
      <p>
        Search by Name
        <input type="text" name="searchString" value= "@ViewData["CurrentFilter"]" />
        <input type="submit" value="Search" class="btn btn-default" />
       </p>
    </div>
</form>

Но когда я нажимаю кнопку подтверждения, фильтрация не выполняется!

Почему?а как решить пожалуйста?

Ответы [ 3 ]

0 голосов
/ 14 декабря 2018

Вы применяете фильтр к другой переменной IQueriable.Вы делаете nzAllIQ.Where..., но вы возвращаете nozContext.ToListAsync().nozContext не имеет возможности узнать о вашем намерении фильтровать.Это, вероятно, исправит это, не слишком изменяя ваш код.

public async Task<IActionResult> Index(string searchString)
{
    var nozContext = _context.NzAll
    .Include(n => n.CodeKNavigation)
    .Include(n => n.CodeKhNavigation)
    .Include(n => n.CodeMrNavigation)
    .Include(n => n.CodeSexNavigation)
    .Include(n => n.HalaNavigation);    

    ViewData["CurrentFilter"] = searchString;

    if (!String.IsNullOrEmpty(searchString))
    {
        nozContext = nozContext.Where(s => s.FullName.Contains(searchString));
    }
    return View(await nozContext.ToListAsync());
}

Не продлевая себя, у меня есть несколько советов для вас.Старайтесь не возвращать свои EF-сущности с вашего контроллера.Обычно вместо этого используются DTO или ViewModels (просто обычные классы), где вы проецируете только поля, необходимые для вашего представления.Таким образом, вы экономите на вызовах базы данных, не возвращая много полей, которые вы не будете использовать.

0 голосов
/ 14 декабря 2018

Проблема в том, что ваше возвращаемое значение не является отфильтрованными данными nzAllIQ .

public async Task<IActionResult> Test(string searchString)
    {
        var nozContext = _context.NzAll.Include(n => n.CodeKNavigation).Include(n => n.CodeKhNavigation).Include(n => n.CodeMrNavigation).Include(n => n.CodeSexNavigation).Include(n => n.HalaNavigation);           
        ViewData["CurrentFilter"] = searchString;

        var nzAllIQ = from s in nozContext
                      select s;
        if (!String.IsNullOrEmpty(searchString))
        {
            nzAllIQ = nzAllIQ.Where(s => s.FullName.Contains(searchString));
        }
        return View(await nzAllIQ.ToListAsync());
    }
0 голосов
/ 14 декабря 2018
[HttpPost]
        public ActionResult TextSearch(string searchName)
        {
            var result = db.Jobs.Where(a => a.JobTitle.Contains(searchName)
            || a.JobContent.Contains(searchName)
            || a.Category.CategoryName.Contains(searchName)
            || a.Category.CategoryDescription.Contains(searchName)).ToList();

            return View(result);
        }

Можете ли вы попробовать это или

public ActionResult Search(string CategoryId, string sehir)
        {


            var nur = sehir;

            var category = db.Jobs.Where(b => b.Sehir == sehir).ToList();


            if (string.IsNullOrEmpty(CategoryId.ToString()) == true && string.IsNullOrEmpty(nur) == true)
            {
                return RedirectToAction("Index");
            }




            else if (string.IsNullOrEmpty(CategoryId.ToString()) == true)
            { category = db.Jobs.Where(b => b.Sehir == sehir).ToList(); return View(category.OrderByDescending(x => x.Tarih).ToList()); }

            else if (string.IsNullOrEmpty(nur) == true)
            { category = db.Jobs.Where(b => b.CategoryId.ToString() == CategoryId).ToList(); return View(category.OrderByDescending(x => x.Tarih).ToList()); }



            else
            {
                category = db.Jobs.Where(b => b.Sehir == sehir && b.CategoryId.ToString() == CategoryId).ToList();
                return View(category.OrderByDescending(x => x.Tarih).ToList());
            }

        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...