应用过滤以生成下拉列表
本文关键字:下拉列表 过滤 应用 | 更新日期: 2023-09-27 18:16:23
我有以下类,并希望根据特定条件过滤下拉列表。
模型类
public class Option
{
public int OptionID { get; set;}
public string OptionName { get; set; }
public int TechnicalCharacteristicID { get; set; }
public int LsystemID { get; set; }
public virtual ICollection<OptionValue> OptionValues { get; set; }
public virtual TechnicalCharacteristic TechnicalCharacteristic { get; set; }
public virtual Lsystem Lsystem { get; set; }
}
public class OptionValue
{
public int OptionValueID { get; set; }
public string OptionVal { get; set; }
public int OptionID { get; set; }
public virtual Option Option { get; set; }
public virtual ICollection< SetValue> SetValue { get; set; }
}
public class SetValue
{
public int SetValueID { get; set; }
public string Value { get; set; }
public bool Status { get; set; }
public int TcSetID { get; set; }
public int OptionValueID { get; set; }
public virtual OptionValue OptionValue { get; set; }
public virtual TcSet TcSet { get; set; }
}
public class TcSet
{
public int TcSetID { get; set; }
public string SetName { get; set; }
[Display(Name = "PhysicalUnit")]
public string PhysicalUnit { get; set; }
public int TechnicalCharacteristicID { get; set; }
public int DataFormatID { get; set; }
public virtual ICollection<SetValue> SetValues { get; set; }
public virtual DataFormat DataFormat { get; set; }
public virtual TechnicalCharacteristic TechnicalCharacteristic { get; set; }
}
public class TechnicalCharacteristic
{
public int TechnicalCharacteristicID { get; set; }
public string TCName { get; set; }
public virtual ICollection<TcSet> TcSets { get; set; }
//public virtual ICollection<Option> Options { get; set; }
}
我想要实现的
我想在SetVal
中保存每个选项的值。SetVal
中生成的下拉列表需要根据以下条件进行过滤(我无法实现该条件,因为它使用了来自其他类的参数)
OptionValue.Option.TechnicalCharacteristicID == TcSet.TCID
我有以下控制器类。我将选择条件等同于预设值,因为我无法匹配选择条件的右侧。
我需要在表中显示选择的结果。当我试图解决现有的结果表,它显示的类型不是IEnumerable,即使它在模型类中声明IEnumerable .
控制器 public ActionResult Create(int OptionValID, int OptionID)
{
var model = new SetValue
{
OptionValueID = OptionValID
};
//var tcid =
// ViewBag.OptionValueID = new SelectList(db.OptionValue, "OptionValueID", "OptionVal");
var tcSet = db.SetValue.Include(x=>x.TcSet).FirstOrDefault(x=>x.OptionValue.Option.TechnicalCharacteristicID==4);
if (tcSet!=null)
{
model.TcSet = tcSet.TcSet;
}
ViewBag.TcSetID = new SelectList(db.TcSet, "TcSetID", "SetName");
return View(model);
}
Create的参数来自Option Value控制器的函数调用。参数为OptionValueID
和OptionID
。
我不知道我是否有完成这项任务的正确方法。
附加评论
即使使用预设值,列表也不起作用。没有编译或运行时错误
<<p> 调试细节/strong>我从select语句中得到两个值,但是这两个值是相同的。它只对应于所需表中该行的第一个值。
使用以下代码生成选择列表数据
public IEnumerable<SelectListItem> SelectList()
{
List<SelectListItem> selectList = new List<SelectListItem>();
var listOfCat1 = db.TcSets.ToList();
if (listOfCat1 != null)
{
if (listOfCat1.Count>0)
{
foreach (var item in listOfCat1)
{
SelectListItem sVM = new SelectListItem();
sVM.Value = item.Id.ToString();
sVM.Text = item.Name;
selectList.Add(sVM);
}
}
}
return selectList.AsEnumerable();
}
然后,在调用视图
之前,将以下代码放入控制器中 ViewBag.ProductCategoriesList = SelectList();
在视图中,用以下代码行调用下拉列表
<div class="form-group" >
@Html.LabelFor(model => model.TcSetID , "Product Category", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(x => x.TcSetID , @ViewBag.ProductCategoriesList as IEnumerable<SelectListItem>, "--- Select Tc Set ---", new { @class = "form-control", @style = "background-color:yellow;border-color:royalblue" })
@Html.ValidationMessageFor(model => model.TcSetID , "", new { @class = "text-danger" })
</div>
</div>