Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 尝试在控制器中进行筛选不起作用_Asp.net Core_Filter_Entity Framework Core - Fatal编程技术网

Asp.net core 尝试在控制器中进行筛选不起作用

Asp.net core 尝试在控制器中进行筛选不起作用,asp.net-core,filter,entity-framework-core,Asp.net Core,Filter,Entity Framework Core,我通过构建数据库创建了一个模型,然后通过实体框架核心创建了控制器 然后,我尝试在控制器中的Index方法中的FullName字段上进行筛选,如下所示: public async Task<IActionResult> Index(string searchString) { var nozContext = _context.NzAll.Include(n => n.CodeKNavigation).Include(n => n.CodeKhNavigation)

我通过构建数据库创建了一个模型,然后通过实体框架核心创建了控制器

然后,我尝试在控制器中的
Index
方法中的
FullName
字段上进行筛选,如下所示:

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());
}
公共异步任务索引(字符串搜索字符串)
{
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=来自_context.NzAll中的s
选择s;
如果(!String.IsNullOrEmpty(searchString))
{
nzAllIQ=nzAllIQ.Where(s=>s.FullName.Contains(searchString));
}
返回视图(等待nozContext.toListSync());
}
然后我将此表单放入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>


按姓名搜索

但当我按下提交按钮时,没有进行过滤

为什么??请问如何解决

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

        }

您正在将筛选器应用于不同的
IQueriable
变量。您可以
nzAllIQ.Where…
但返回
nozContext.toListSync()
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());
}
公共异步任务索引(字符串搜索字符串)
{
var nozContext=\u context.NzAll
.包括(n=>n.CodeKNavigation)
.Include(n=>n.code)
.Include(n=>n.CodeMrNavigation)
.Include(n=>n.CodeSexNavigation)
.包括(n=>n.哈拉那活力);
ViewData[“CurrentFilter”]=searchString;
如果(!String.IsNullOrEmpty(searchString))
{
nozContext=nozContext.Where(s=>s.FullName.Contains(searchString));
}
返回视图(等待nozContext.toListSync());
}

在不耽误我的时间的情况下,我有几点建议给你。尽量不要从控制器返回EF实体。通常,使用DTO或ViewModels(只是普通类),您只投影视图所需的字段。这样可以节省数据库调用,而不必返回大量不使用的字段

问题是您的返回值不是经过过滤的数据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());
    }
公共异步任务测试(字符串搜索字符串)
{
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=来自nozContext中的s
选择s;
如果(!String.IsNullOrEmpty(searchString))
{
nzAllIQ=nzAllIQ.Where(s=>s.FullName.Contains(searchString));
}
返回视图(wait nzAllIQ.ToListAsync());
}

嘿,我可能错了,但我看不出这段代码如何帮助OP提问?这似乎是一个完全不同的代码。