应用过滤以生成下拉列表

我有以下类,并希望根据特定条件筛选下拉列表。

模型类

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 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 { 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 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 TcSets { get; set; } //public virtual ICollection Options { get; set; } } 

我想要实现的目标

我想为SetVal每个选项保存值。 在SetVal生成的Dropdownlist需要根据以下条件进行过滤(我无法实现条件,因为它使用来自其他类的参数)

  OptionValue.Option.TechnicalCharacteristicID == TcSet.TCID 

我有以下控制器类。 我已将选择条件等同于预设值,因为我无法匹配选择条件的右侧。

我需要在表格中显示select的结果。 当我尝试将现有结果解析为表时,它显示类型不是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控制器的函数调用。 参数是OptionValueIDOptionID

我不知道我是否有正确的方法来完成任务。

附加评论

即使使用预设值,列表也不起作用。 没有编译或运行时错误

调试细节

我从select语句中得到两个值,但两个值都是相同的。 它只对应于所需表中行的第一个值。

使用以下代码生成选择列表数据

  public IEnumerable SelectList() { List selectList = new List(); 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(); 

在您的视图中,使用以下代码行调用下拉列表

  
@Html.LabelFor(model => model.TcSetID , "Product Category", htmlAttributes: new { @class = "control-label col-md-2" })
@Html.DropDownListFor(x => x.TcSetID , @ViewBag.ProductCategoriesList as IEnumerable, "--- Select Tc Set ---", new { @class = "form-control", @style = "background-color:yellow;border-color:royalblue" }) @Html.ValidationMessageFor(model => model.TcSetID , "", new { @class = "text-danger" })

我希望这有帮助。