如何在下拉列表中显示名称而不是 ID 以供用户选择 MVC

Posted

技术标签:

【中文标题】如何在下拉列表中显示名称而不是 ID 以供用户选择 MVC【英文标题】:How to show name instead of ID from another table in dropdown list for user to select MVC 【发布时间】:2021-10-31 17:52:51 【问题描述】:

我目前正在做一个项目,我现在有 2 个表,User 和 Designation。当用户注册时,他们必须选择一个名称,这意味着 DesignationID 是用户表中的一个 FK,但是在我看来,我不想显示我希望它在用户的下拉列表中显示名称的 ID注册时可以选择。我已经尝试了一些解决方案,但是我仍然收到一个错误,我不知道如何解决,因为我是 asp.net 的新手,请你帮忙吗? 这是我尝试过的

用户模型

public partial class User



    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int UserID  get; set; 
    public User user  get; set; 

    [Required]
    [Display(Name ="First Name")]
    public string FirstName  get; set; 

    [Required]
    [Display(Name = "Last Name")]
    public string LastName  get; set; 

    [Required]
    [Display(Name = "Designation")]
    public int DesignationID  get; set; 
    public virtual Designation designation  get; set; 

    [Required]
    [Display(Name = "Email")]
    [DataType(DataType.EmailAddress)]
    public string Email  get; set; 

    [Required]
    [Display(Name = "Username")]
    public string UserName  get; set; 

    [Required]
    [Display(Name = "Password")]
    [DataType(DataType.Password)]
    public string Password  get; set; 

    [Required]
    [Display(Name = "Address")]
    public string Address  get; set; 

    [Required]
    [Display(Name = "Date of birth")]
    [DataType(DataType.Date)]
    public System.DateTime DOB  get; set; 

指定模型

公共部分类名称

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]

    public int DesignationID  get; set; 

    [Required]
    [Display(Name ="Designation Name")]
    public string DesignationName  get; set; 

    public virtual ICollection<User> users  get; set; 

我使用的控制器代码

公共类 HomeController : 控制器


    private CompanyPrintersEntities db = new CompanyPrintersEntities();
    public ActionResult Index()
    
  
        return View(db.Users.Include(us => us.user).Include(us => us.designation).ToList());
    

查看

@html.LabelFor(model => model.DesignationID, htmlAttributes: new @class= "control-label col-md-2" )
        <div class="col-md-10">
            @foreach (User item in Model)
            
                <p>User @item.User.Name is in Designation @item.Designation.Name</p>
            
        </div>
    </div>

我得到的错误 Error

我正在使用 Entity Framework DB 第一种方法。

【问题讨论】:

您能否展示来自 Register.cshtml 的 @model 声明?可能您指的是另一个不是 User 类的类。 我已经尝试了很多:@model EngenPrintersApp.Models.User 还有@model IEnumerable 我只有一个用户类,你认为这可能是引用冲突吗? 非常感谢,我会看看这个,现在试一试。伟大的!再次感谢,非常感谢! 【参考方案1】:

我认为你必须使用 thenInclude

 db.Users.Include(us => us.user).ThenInclude(us => us.designation).ToList()

【讨论】:

谢谢,我现在就试试。 它不允许我使用 ThenInclude 您使用哪个版本的 EF? 我正在使用 EF 6 查看此答案***.com/a/10823103/15714806【参考方案2】:

在你的模型中创建一个列表

public List<Designation> DesignationsList  get; set; 

你可以在你的控制器中使用这个列表

Designations.DesignationsList = _db.Designations.ToList();

然后使用下拉列表作为

 <div class="row form-group">
                <div class="col-md-2">
                    <label asp-for="DesignationID" class="control-label"></label>
                </div>
                <div class="col-md-10">
                    <select id="drpEmpList" class="form-control" asp-for="DesignationID" asp-items="@(new SelectList(Model.DesignationList, "DesignationID", "DesignationName"))">
                        <option value="">--Select--</option>
                    </select>
                    <input type="hidden" asp-for="DesignationID" />

                </div>
            </div>

注意:根据您的项目使用类名、连接和其他类成员

【讨论】:

谢谢,我现在正在尝试,只是想确认一下应该进入哪个Action方法?索引或注册?以及哪个模型、用户或名称? 在用户模型中列出并在索引方法中使用它

以上是关于如何在下拉列表中显示名称而不是 ID 以供用户选择 MVC的主要内容,如果未能解决你的问题,请参考以下文章

国家下拉列表将 ID 而不是名称(字符串)插入数据库(mysql)

如何在单独的列中添加排序列名称,而不是在下拉列表中选择列来对表进行排序?

如何设置动态下拉列表的选定值

如何在下拉列表中显示所选项目名称?

使用 ajax、sql 和 php 的动态下拉列表

如何隐藏组合框下拉列表中的列?