gpt4 book ai didi

c# - 使用多个字段过滤/搜索 - ASP.NET MVC

转载 作者:IT王子 更新时间:2023-10-29 04:05:36 26 4
gpt4 key购买 nike

我正在使用 ASP.NET MVCEF 6

我有一个库存页面,其中显示了库存商品的所有信息。现在我也想过滤记录。

在下图中,我有 3 个选项。我可能会按每个选项进行过滤,一次一个,或者两个或所有三个的组合。

我正在考虑为每个选择的选项编写 linq 查询。但如果过滤器选项增加,这是不可能的。有没有更好的方法。

谢谢!

enter image description here

这就是我在我的 Controller 中所做的。(当前下拉菜单有两个选项,不包括:“-- 选择一个 -- ”)

public ActionResult StockLevel(string option, string batch, string name)
{
if (option != "0" && batch == "" && name == "")
{
if(option == "BelowMin")
{
List<Stock> stk = (from s in db.Stocks
where s.Qty < s.Item.AlertQty
select s).ToList();
return View(stk);
}
else
{
List<Stock> stk = (from s in db.Stocks
where s.Qty == s.InitialQty
select s).ToList();
return View(stk);
}
}
if (option == "0" && batch != "" && name == "")
{
List<Stock> stk = (from s in db.Stocks
where s.BatchNo == batch
select s).ToList();
return View(stk);
}
if (option == "0" && batch == "" && name != "")
{
List<Stock> stk = (from s in db.Stocks
where s.Item.Name.StartsWith(""+name+"")
select s).ToList();
return View(stk);
}
return View(db.Stocks.ToList());
}

最佳答案

我建议您分离关注点并使用一种方法,使您的 Controller 中的代码像这样,简单、美观且可扩展:

public ActionResult Index(ProductSearchModel searchModel)
{
var business = new ProductBusinessLogic();
var model = business.GetProducts(searchModel);
return View(model);
}

好处:

  • 您可以根据需要在 ProductSearchModel 中放入任何您需要的内容。
  • 您可以根据需要在GetProducts 中编写任何逻辑。没有限制。
  • 如果您添加新字段或选项进行搜索,您的操作和 Controller 将保持不变。
  • 如果您的搜索逻辑发生变化,您的操作和 Controller 将保持不变。
  • 您可以在需要搜索产品、 Controller 甚至其他业务逻辑的任何地方重用搜索逻辑。
  • 有了这样的 ProductSearchModel,您可以将其用作 ProductSearch 部分 View 的模型,您可以对其应用 DataAnnotations 以增强模型验证并使用 Display 或其他属性帮助 UI 呈现它。
  • 您可以在该业务逻辑类中添加与您的产品相关的其他业务逻辑。
  • 按照这种方式,您可以获得更有条理的应用程序。

实现示例:

假设您有一个 Product 类:

public class Product
{
public int Id { get; set; }
public int Price { get; set; }
public string Name { get; set; }
}

您可以创建一个 ProductSearchModel 类,并根据它们放置一些您要搜索的字段:

public class ProductSearchModel
{
public int? Id { get; set; }
public int? PriceFrom { get; set; }
public int? PriceTo { get; set; }
public string Name { get; set; }
}

然后您可以这样将搜索逻辑放在 ProductBusinessLogic 类中:

public class ProductBusinessLogic
{
private YourDbContext Context;
public ProductBusinessLogic()
{
Context = new YourDbContext();
}

public IQueryable<Product> GetProducts(ProductSearchModel searchModel)
{
var result = Context.Products.AsQueryable();
if (searchModel != null)
{
if (searchModel.Id.HasValue)
result = result.Where(x => x.Id == searchModel.Id);
if (!string.IsNullOrEmpty(searchModel.Name))
result = result.Where(x => x.Name.Contains(searchModel.Name));
if (searchModel.PriceFrom.HasValue)
result = result.Where(x => x.Price >= searchModel.PriceFrom);
if (searchModel.PriceTo.HasValue)
result = result.Where(x => x.Price <= searchModel.PriceTo);
}
return result;
}
}

然后在您的 ProductController 中,您可以这样使用:

public ActionResult Index(ProductSearchModel searchModel)
{
var business = new ProductBusinessLogic();
var model = business.GetProducts(searchModel);
return View(model);
}

重要提示:

在现实世界的实现中,请考虑为您的业务类实现一个合适的 Dispose 模式,以便在需要时释放数据库上下文。有关更多信息,请查看 Implementing a Dispose methodDispose Pattern .

关于c# - 使用多个字段过滤/搜索 - ASP.NET MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33153932/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com