我有以下类,并希望根据特定条件过滤下拉列表。
模型类
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
我有以下控制器类。我已将选择条件等同于预设值,因为我无法匹配选择条件的右侧。
我需要在表格中显示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控制器的函数调用。参数是OptionValueID
和OptionID
。
我不知道我是否有正确的方法来完成任务。
其他评论
即使使用预设值,列表也不起作用。没有编译或运行时错误
调试详情
我从select语句中得到两个值,但两个值都是相同的。它只对应于所需表格中行的第一个值。
答案 0 :(得分:1)
使用以下代码生成选择列表数据
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>
我希望这会有所帮助。