如何在下拉列表中显示名称而不是 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我认为你必须使用 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)