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提问?这似乎是一个完全不同的代码。