【问题标题】:Proper method of populating a dropdown in ASP.NET MVC [closed]在 ASP.NET MVC 中填充下拉列表的正确方法 [关闭]
【发布时间】:2018-09-09 14:53:40
【问题描述】:

这就是我从模型中实现下拉菜单的方式。我只是想检查这是否是正确的方法还是有更简单的方法?看起来很复杂。

我列表的型号:

public class ApplicationRolesDropdownListDetailViewModel
{
    public String RoleId { get; set; }
    public String ApplicationRoleName { get; set; }
}

进入我的视图的视图模型

public class ApplicationRolesDropdownListViewModel
{
    public SelectList Roles { get; set; }
}

获取项目列表并将其放在视图中的下拉列表中的控制器:

    public ActionResult NewRole()
    {
        var applicationRoles = applicationRolesData.GetAllApplicationRoles();
        ApplicationRolesDropdownListViewModel ardlvm = new ApplicationRolesDropdownListViewModel();
        ardlvm.Roles = new SelectList(applicationRoles, "RoleId", "ApplicationRoleName");
        return View("~/Views/Users/Modals/AddRole.cshtml", ardlvm);
    }

我的观点:

    <div class="form-group">
        @Html.DropDownListFor(m => m.Roles,Model.Roles, new { @id = "role", @class = "dropdown" })
    </div>

另外,当我通过 javascript 从列表中选择一个项目时,我似乎无法获取 RoleId。

编辑:添加了我的 GetApplicationRoles

    public List<ApplicationRolesDropdownListViewModel > GetAllApplicationRoles()
    {
        List<ApplicationRolesDropdownListViewModel > data = new List<ApplicationRolesDropdownListViewModel >();
        try
        {
            var applicationRoles = dbContext.AspNetRolesExtendedDetails.ToList();
            data = (from ar in applicationRoles
                    join a in dbContext.AspNetApplications
                     on ar.ApplicationId equals a.Id
                    select new ApplicationRolesDropdownListViewModel 
                    {
                        RoleId = ar.Id,
                        ApplicationRoleName = ar.Name + " ( " + a.Name + " )"
                    }).ToList();
        }
        catch (Exception e)
        {
            logger.Error(e, AspNetEventLogs.NotFound);
        }
        return data;
    }

【问题讨论】:

  • 您无法获取角色 ID,因为您的模型是针对整个列表的,而不是单个项目
  • 我应该调整什么?我对最后一步感到很困惑。
  • 我建议加入 CodeReview.StackExchange 并在那里提出这个问题。在这里它很可能被关闭为“基于意见”。

标签: javascript c# jquery asp.net asp.net-mvc


【解决方案1】:

这样试试

视图模型

public class ApplicationRolesViewModel
{
    // Display Attribute will appear in the Html.LabelFor
    [Display(Name = "User Role")]
    public string RoleId { get; set; }
    public IEnumerable<SelectListItem> Roles { get; set; }
}

控制器

public ActionResult NewRole()
    {
        var roleData = new IEnumerable<SelectListItem>();
        applicationRolesData.GetAllApplicationRoles().Foreach(x =>
                   roleData.Add( new SelectListItem
                        {
                            Value = x.RoleId.ToString(),
                            Text = x.ApplicationRoleName
                        });
       );
        ApplicationRolesViewModel ardlvm = new ApplicationRolesViewModel();
        ardlvm.Roles = new SelectList(roleData , "Value", "Text")
        return View("~/Views/Users/Modals/AddRole.cshtml", ardlvm);
    }

查看

@model ApplicationRolesViewModel

@Html.LabelFor(m => m.RoleId)
@Html.DropDownListFor(m => m.RoleId, Model.Roles)

并在Jquery中获取当前选择的下拉列表值:

$('#RoleId').val();

获取当前选中的文本:

$('#RoleId:selected').text();

【讨论】:

  • 您好,感谢您的回答。我也添加了我的 GetApplicationRoles,因为在尝试您的解决方案时我根本无法获得 .Select
  • @JianYA GetAllApplicationRoles 响应类型是什么?
  • ApplicationRolesDropdownListViewModel
  • @JianYA 所以你在ApplicationRolesDropdownListViewModel有一个id的角色?
  • 它应该返回一个项目列表
猜你喜欢
  • 2014-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多