【问题标题】:How to show name instead of ID from another table in dropdown list for user to select MVC如何在下拉列表中显示名称而不是 ID 以供用户选择 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
  • 我只有一个用户类,你认为这可能是引用冲突吗?
  • 非常感谢,我会看看这个,现在试一试。伟大的!再次感谢,非常感谢!

标签: c# asp.net-mvc


【解决方案1】:

我认为你必须使用 thenInclude

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

【讨论】:

【解决方案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方法?索引或注册?以及哪个模型、用户或名称?
  • 在用户模型中列出并在索引方法中使用它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-11
  • 2020-11-26
  • 2023-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-24
相关资源
最近更新 更多