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