繁体   English   中英

在C#MVC的ViewModel中创建一个IEnumerable的子模型

[英]Making a sub model an IEnumerable in my ViewModel in C# MVC

我正在尝试设置ViewModel - 包含两个DropDown列表的ViewModel。

RatesList有一个“ValueRange”下拉列表,工作正常。

我还希望它有一个“Occ”下拉列表 - 目前它只是一个嵌套模型 - 但我需要它是一个IEnumerable,所以我可以使用EditorTemplate在Rates EditorTemplate中显示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 ViewModel中的IEnumerable / SelectList?

谢谢你的帮助,马克

您无法为查询创建编辑器,因此您必须将Occs -Property转换为IEnumerable<Occ> 由于您要创建下拉列表,因此更好地证明SelectList:

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确保它被执行并表示为可枚举的集合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM