【问题标题】:How to properly filter data using checkboxes?如何使用复选框正确过滤数据?
【发布时间】:2021-06-19 02:58:32
【问题描述】:

我有一个 asp.net 核心项目,但遇到了问题。

在视图中,我有这样的代码

<div class="check-box-inner mt-10">
 <h4 class="title">Power (W) </h4>
 <div class="filter-check-box">
     <input name="power_cold" value="1000" type="checkbox" id="power_cold1">
     <label for="power_cold1">Less 2000 </label>
 </div>
 <div class="filter-check-box">
     <input name="power_cold" value="3000" type="checkbox" id="power_cold2">
     <label for="power_cold2">2000-3000</label>
 </div>
 <div class="filter-check-box">
     <input name="power_cold" value="4000" type="checkbox" id="power_cold3">
     <label for="power_cold3">3000-4000</label>
 </div>
 <div class="filter-check-box">
      <input name="power_cold" value="5000" type="checkbox" id="power_cold4">
      <label for="power_cold4">4000-5000</label>
 </div>
 <div class="filter-check-box">
      <input name="power_cold" value="30000" type="checkbox" id="power_cold5">
      <label for="power_cold5">Больше 5000</label>
 </div>
</div>

在控制器中,我是这样理解的。我正在尝试使用 Linq 过滤数据。 但我不知道如何将更少或更多条件应用于值列表。如何解决这个问题?也许我应该以与视图不同的格式返回数据?

 public ActionResult Summary(List<int> power_cold)
{
   ProductLis products = new ProductLis()
   {
      Products = repository.Products.Where(f=>f.Power<=(something)&&f.Power>=(something))
   }
}

【问题讨论】:

  • 试试 ||代替 &&。仅当 Power 等于 something 时,您的谓词才为真。

标签: c# asp.net asp.net-mvc linq asp.net-core


【解决方案1】:

我建议使用复杂的 ViewModel for Controller Action 来丰富你的目标:

<div class="check-box-inner mt-10">
 <h4 class="title">Power (W) </h4>
 <div class="filter-check-box">
     <input name="LessThen2000" value="true" type="checkbox" id="power_cold1">
     <label for="power_cold1">Less 2000 </label>
 </div>
 <div class="filter-check-box">
     <input name="Between2000And3000" value="true" type="checkbox" id="power_cold2">
     <label for="power_cold2">2000-3000</label>
 </div>
 <div class="filter-check-box">
     <input name="Between3000And4000" value="true" type="checkbox" id="power_cold3">
     <label for="power_cold3">3000-4000</label>
 </div>
 <div class="filter-check-box">
      <input name="Between4000And5000" value="true" type="checkbox" id="power_cold4">
      <label for="power_cold4">4000-5000</label>
 </div>
 <div class="filter-check-box">
      <input name="MoreThen5000" value="true" type="checkbox" id="power_cold5">
      <label for="power_cold5">Больше 5000</label>
 </div>
</div>

以及代表这个结构的ViewModel:

public class GetSummaryInput{

   public bool LessThen2000 {get;set;}

   public bool Between2000And3000 {get;set;}

   public bool Between3000And4000{get;set;}

   public bool Between4000And5000 {get;set;}

   public bool MoreThen5000 {get;set;}

}

然后在里面这样使用它:

public ActionResult Summary(GetSummaryInput input)
{
   IQueriable<Products> query = repository.Products;

   if(input.LessThen2000){
      query = query.Where(pr=> pr.Power <= 2000);
   }
   
   if(input.Between2000And3000){
      query = query.Where(pr=> pr.Power >= 2000 && pr.Power <= 3000);
   }

   //other properties in the same way 

}

【讨论】:

    猜你喜欢
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 2019-01-04
    • 1970-01-01
    • 2020-11-25
    • 2021-06-03
    • 1970-01-01
    相关资源
    最近更新 更多