C# MVC中的下拉列表

C# MVC中的下拉列表,c#,asp.net-mvc,entity-framework,dependency-injection,html.dropdownlistfor,C#,Asp.net Mvc,Entity Framework,Dependency Injection,Html.dropdownlistfor,在我的MVC项目(代码优先方法)中,我为每个用户的侧导航菜单创建了一个模型类。我需要在相关视图中创建一个下拉列表,其中包含AspNetUsers表的不同用户名(自定义字段)。目标是在NavigationMenus表中显示与相关用户关联的每个语音,并创建一个新语音,但我不理解如何生成: 1) 下拉列表 2) 选择所需用户后刷新页面,以显示相关记录 型号: public class NavigationMenu { public NavigationMenu() {

在我的MVC项目(代码优先方法)中,我为每个用户的侧导航菜单创建了一个模型类。我需要在相关视图中创建一个下拉列表,其中包含AspNetUsers表的不同用户名(自定义字段)。目标是在NavigationMenus表中显示与相关用户关联的每个语音,并创建一个新语音,但我不理解如何生成: 1) 下拉列表 2) 选择所需用户后刷新页面,以显示相关记录

型号:

public class NavigationMenu
{
    public NavigationMenu()
    {
        MenuChildren = new HashSet<NavigationMenu>();
    }

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }      
    public string Text { get; set; }
    public string Action { get; set; }
    public string Controller { get; set; }
    public string Icon { get; set; }
    public bool Selected { get; set; }

    public int? NavigationMenuId { get; set; }

    public virtual ICollection<NavigationMenu> MenuChildren { get; set; }
    public virtual NavigationMenu NavigationMenus2 { get; set; }

    //one-to-many relationships AspNetUsers -> NavigationMenu
    public string ApplicationUserId { get; set; }
    public virtual ApplicationUser ApplicationUser { get; set; }

}
在view List.cshtml中:

@model IEnumerable<siapp.Models.NavigationMenu>

<div class="form-group">
        @Html.Label("Role", new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.DropDownList("User", (SelectList)ViewBag.Name, " ", new { @class = "form-control" })                
        </div>
    </div>

有一种方法可以通过API查询ApplicationUser,以避免数据库依赖性?

只是一种一般观察,如果应用程序上下文继承自IdentityDbContext,则可以简化您的生活。然后您可以关联并访问ApplicationUser。此外,您可能会查看以传递下拉列表所需的集合。Steve I还尝试通过以下教程继承IdentityDbContext,但这比解决难题复杂得多。我总是有相同的“dbo.ApplicationUsers'is not valid”错误。然后,我将这个属性添加到模型中:public string UserLogin{get{return ApplicationUser.UserName;}}}}但不起作用,我陷入了僵局。如果要引用ApplicationUser,它需要从IdentityDbContext继承。然后取出所有的dbset和onmodel为ApplicationUser创建代码,因为这是由IdentityDbContext在幕后处理的。
public class NavigationController : Controller
{
    NavigationMenuContext navigationMenuContext;
    public NavigationController()
    {
        navigationMenuContext = new NavigationMenuContext();
    }


    [HttpGet]
    [Authorize(Roles = "Admin")]
    public ActionResult List()
    {            
        ViewBag.Name = new SelectList(navigationMenuContext.NavigationMenus.Select(m => m.ApplicationUser).Distinct().ToList());                             
        return View();
    }                  

}
@model IEnumerable<siapp.Models.NavigationMenu>

<div class="form-group">
        @Html.Label("Role", new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.DropDownList("User", (SelectList)ViewBag.Name, " ", new { @class = "form-control" })                
        </div>
    </div>
var context = new IdentityDbContext();
var allUsers = context.Users.Select(m => m.UserName).Distinct().ToList();
ViewBag.Name = new SelectList(allUsers);
Return View();