【问题标题】:Dropdown List from View Model Result查看模型结果的下拉列表
【发布时间】:2018-12-13 06:22:51
【问题描述】:

我有一个“ViewModel”的工作示例,我认为该示例适用于下拉列表。目前我正在使用它来做一个 Foreach 并且它可以正常工作,但我需要在我的表单上的下拉列表中获得相同的结果。我尝试了不同的想法,我认为这些想法可能会奏效。似乎没有人能做到这一点。我没有示例,因为我通常只是阅读一堆帖子并开始向其抛出代码以查看哪些内容。我仍在学习,所以希望有人可以为我指明正确的方向,或者向我展示一些可以填充我需要的代码。我相信我的 ViewModel 中有我需要的一切,我想远离 Viewbag。下面是我的“视图模型”。

除非有更好的方法,否则我想用这条线来填充下拉菜单。

result.Addresses = db.Addresses.Where(a => a.CompanyId == result.CompanyId);

编辑 - 这是此“视图模型”的当前工作下拉列表

@Html.DropDownList("AddressId", new SelectList(Model.Addresses, "AddressId", "LocationName"), "Select Address user belongs to", new { @class = "form-control" })

这是整个“ViewModel”

    public class RegisterUserViewModel
{
    public static RegisterUserViewModel GetCompanyId(string userId, CustomerEntities db)
    {
        var qCust = from ad in db.Addresses

                    join anu in db.Users on ad.AddressId equals anu.AddressId
                    join cus in db.CompanyNames on ad.CompanyId equals cus.CompanyId
                    where (anu.Id == userId)
                    select new RegisterUserViewModel()
                    {
                        UserId = userId,
                        CompanyId = cus.CompanyId,
                        AddressId = ad.AddressId
                    };

        var result = qCust.SingleOrDefault();

        if (result != null)
        {
            result.Addresses = db.Addresses.Where(a => a.CompanyId == result.CompanyId);
        };

        return result;
    }

    [Required]
    [Display(Name = "User Name")]
    public string UserName { get; set; }

    [Required]
    [EmailAddress]
    [Display(Name = "Email")]
    public string Email { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Confirm password")]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }

    [Required]
    [Display(Name = "User Address")]
    public int AddressId { get; set; }

    [Required]
    [Display(Name = "User Roles")]
    public string UserRoles { get; set; }

    public string UserId { get; set; }
    public int CompanyId { get; set; }
    public virtual IEnumerable<Addresses> Addresses { get; set; }
}

我希望将 AddressId 作为值,将 LocationName 作为文本。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-viewmodel


    【解决方案1】:

    尝试如下。

    @Html.DropDownList("address", new SelectList(Model.Addresses, "AddressId", "LocationName"))
    

    正如您在评论中提到的,在使用@Html.DropDownList(model =&gt; model.AddressId... 后,您将第二项作为选定值,所以这里发生的事情是它会自动从您的model.AddressId 设置选定值。只是检查一下。

    现在,如果您想设置默认值,请确保您的 model.AddressId 的值与您的默认选择值相同。

    【讨论】:

    • 成功了,非常感谢。但是在我的情况下,“地址”需要“AddressId”。我确实尝试过类似的东西,但有 model => model.AddressId, new List(), "---Select---".
    • 所以在我将其标记为正确后,我注意到它是预先选择选项 2 并将其称为所选项目。它似乎忽略了默认值或占位符值。知道为什么会这样做吗?我没有在任何地方选择默认值,选择的 2 值也是这种情况下的最后一条记录。就像它调用列表中的最后一个项目一样。谢谢
    • 所以我使用 javascript window.onload 将值重置为 0。
    猜你喜欢
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    相关资源
    最近更新 更多