我正在尝试设置一个ViewModel - 一个包含两个下拉列表的视图模型。
RatesList有一个"ValueRange"下拉列表,可以正常工作。
我还希望它有一个"Occ"下拉列表 - 目前它只是一个嵌套模型 - 但我需要它是一个 IEnumerable,这样我就可以在费率编辑器模板中使用编辑器模板来显示 Occs。
我的两个模型是:
public class RatesList
{
[Key]
public long TypeID { get; set; }
public int NumSelected { get; set; }
public IEnumerable<SelectListItem> ValueRange
{
get
{
return Enumerable
.Range(0, this.TypeCount + 1)
.Select(x => new SelectListItem
{
Value = x.ToString(),
Text = x.ToString()
});
}
}
public virtual IQueryable<Occ> Occs { get; set; }
public string OccSelected { get; set; }
}
。和。。。
public class Occ
{
public string occdesc { get; set; }
public string curr { get; set; }
public string TypeName { get; set; }
public string OccSelected { get; set; }
public string occval
{
get
{
return occdesc + "||" + string.Format("{0:0.00}", ratetocharge) + "||" + TypeName;
}
}
public string occdesc2
{
get
{
return occdesc + " (" + curr + string.Format("{0:0.00}", ratetocharge) + ") ";
}
}
public decimal ratetocharge { get; set; }
public virtual RatesList RatesList { get; set; }
}
无论如何,我可以在视图模型中做我所要求的事情 - 即将 Occ 作为 RatesList 视图模型中的 IEnumerable/SelectList?
谢谢你的帮助,马克
您无法为查询创建编辑器,因此您必须将Occs
-属性转换为IEnumerable<Occ>
。由于您要创建一个下拉列表,因此最好证明一个选择列表:
public class RatesList
{
public SelectList Occs { get; set; }
public string OccSelected { get; set; }
}
在您的视图中,您可以使用选择列表作为下拉列表的数据源:
@Html.DropDownListFor(m => m.OccSelected, Model.Occs);
所选值将存储在 OccSelected
属性中。实例化视图模型时,请确保同时初始化选择列表:
var model = new RatesList()
{
Occs = new SelectList(occsQuery.ToList(), "occdesc", "occdesc2")
}
其中,occdesc
属性充当键,occdesc2
属性充当下拉项的说明。 occsQuery
是你之前IQueryable<Occ>
的内容,ToList
确保它被执行并表示为可枚举的集合。