【问题标题】:concatenate two fields in drop down list连接下拉列表中的两个字段
【发布时间】:2020-11-29 21:19:41
【问题描述】:

我有一个模型类

namespace myapp.Models
{
    public class SubjectModels 
    {
        [Key]
        public int SubjectId { get; set; }
        [Required]
        public int SubjectType { get; set; }
        [Required]
        [MinLength(5)]
        public string SubjectName { get; set; }
    }
}

这里,SubjectType = 1 for Optional and SubjectType = 2 for Compulsory

现在在另一个班级我必须为这个班级创建一个下拉菜单,

namespace myapp.Models
{
    public class SelectionModels 
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int SelectionId { get; set; }
        [Required]
        [MinLength(5)]
        public string SelectionDate { get; set; }
        
        [ForeignKey("SubjectId")]
        public SubjectModels Subject { get; set; } 

        public int SubjectId { get; set; }
    }
}

当我通过脚手架生成控制器和 create.cshtml 时,我的创建控制器方法:

public ActionResult Create()
{
    ViewBag.SubjectId = new SelectList(db.Subjects, "SubjectId", "SubjectName");            
    return View();
}
    

但我必须创建一个下拉列表,连接字段“SubjectName”和“SubjectType”。此外,SubjectType 的显示应该是 Optional 和 Compulsory 而不是整数。

例如,

"Optional - ResearchMethodology"
"Compulsory - BioChemistry"

我该怎么做?我用谷歌搜索但找不到合适的解决方案。请帮忙!!!

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-4


    【解决方案1】:

    我会在 SubjectModels 类中创建一个额外的属性。

    class SubjectModels
    {
        public int SubjectId { get; set; }
        public int SubjectType { get; set; }
        public string SubjectName { get; set; }
    
        public string SubjectNameAndType
        {
            get
            {
                return string.Format("{0} - {1}", SubjectName, SubjectType);
            }
        }
    }
    

    然后在Controller中你可以使用该属性来填充SelectList

    var list = new List<SubjectModels>()
    {
        new SubjectModels()
        {
            SubjectType = 1,
            SubjectName = "Name 1"
        },
        new SubjectModels()
        {
            SubjectType = 2,
            SubjectName = "Name 2"
        }
    };
    
    ViewBag.SubjectId = new SelectList(list, "SubjectId", "SubjectNameAndType");
    

    现在您将在 DropDownList 中看到正确的值。

    @Html.DropDownListFor(m => m.MyValue, (SelectList)ViewBag.SubjectId, "Select...")
    

    【讨论】:

    • 感谢您的回复。但我的主题列表是动态的。看来您只是从控制器方法中填充值...另外我不想在SubjectType 中显示整数值请阅读完整的问题。也请就此提出建议。
    • 静态列表仅用于本示例。 SubjectNameAndType 属性没有区别。您可以根据需要编辑属性中的代码。
    • 如何将 SubjectType 值分别更改为 1 和 2 的 "Optional" 、 "Compulsory"。
    • SubjectType == 1 ? "Optional" : "Compulsory";
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多