c# - 查看模型结果的下拉列表

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

我有一个“ViewModel”的工作示例,我认为它适用于下拉列表。目前我正在使用它来做一个 Foreach 并且它工作正常但我需要在我的表单下拉列表中得到相同的结果。我尝试过我认为可能可行的不同想法。似乎没有人能做到这一点。我没有示例,因为我通常只是阅读了一堆帖子,然后开始编写代码以查看有什么用。我仍在学习,所以希望有人能为我指明正确的方向,或者向我展示一些可以满足我需要的代码。我相信我的 ViewModel 中拥有我需要的一切,我想远离 Viewbag。下面是我的“ViewModel”。

这是我想用来填充下拉列表的行,除非有更好的方法。

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

编辑 - 这是此“ViewModel”的当前工作下拉列表

@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 作为文本。

最佳答案

尝试如下。

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

正如您在评论中提到的,在使用 @Html.DropDownList(model => model.AddressId... 后,您将获得第二项作为选定值,所以这里发生了什么将自动设置您的 model.AddressId 中的选定值。只需检查一下即可。

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

关于c# - 查看模型结果的下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53756058/

相关文章:

c# - 生成1到3之间的随机数/包括1位小数

c# - 我应该为来自 TextBox 控件的序列化数据指定哪种编码

c# - 没有隐式引用 'card' 从 'card' 到 IComparable 的转换

c# - 如何使用 viewmodel (IEnumerable) 在 ASP.NET MVC 4 中更新我的数据库

c# - 使用 UpdateModel() 时如何消除服务器端清理的重复代码?

c# - 在 View 中从 ViewModel 迭代 ICollection

c# - 关闭在代码中打开的进程

.net - Visual Studio 2012 中的 Razor 3

c# - 将数据从 Controller 传递到 View 布局的最佳实践是什么?

asp.net-core - ASP.NET MVC Core 仅日期格式无法使用数据注释