应用过滤以生成下拉列表
Apply filtering to generate a dropdown list
我有以下 class 并且想根据特定条件过滤下拉列表。
型号类
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
中生成的下拉列表需要根据以下条件进行过滤(我无法实现条件,因为它使用其他classes的参数)
OptionValue.Option.TechnicalCharacteristicID == TcSet.TCID
我有以下控制器class。我将 select 条件等同于预设值,因为我无法匹配 select 条件的右侧。
我需要在 table 中显示 select 的结果。当我尝试将现有结果解析为 table 时,它显示类型不是 IEnumerable,即使它在模型 class..
中被声明为 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 语句中得到了两个值,但这两个值是相同的。它仅对应于所需 table.
行的第一个值
使用以下代码生成您的 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>
希望对您有所帮助。
我有以下 class 并且想根据特定条件过滤下拉列表。
型号类
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
中生成的下拉列表需要根据以下条件进行过滤(我无法实现条件,因为它使用其他classes的参数)
OptionValue.Option.TechnicalCharacteristicID == TcSet.TCID
我有以下控制器class。我将 select 条件等同于预设值,因为我无法匹配 select 条件的右侧。
我需要在 table 中显示 select 的结果。当我尝试将现有结果解析为 table 时,它显示类型不是 IEnumerable,即使它在模型 class..
中被声明为 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 语句中得到了两个值,但这两个值是相同的。它仅对应于所需 table.
行的第一个值使用以下代码生成您的 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>
希望对您有所帮助。