Выпадающий список из View Model Result - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть рабочий пример «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 в качестве текста.

1 Ответ

0 голосов
/ 13 декабря 2018

Попробуйте, как показано ниже.

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

Как вы упомянули в комментарии, что вы получаете 2-й элемент в качестве выбранного значения после использования @Html.DropDownList(model => model.AddressId..., так что здесь произойдет, что он автоматически установит выбранное значениеот вашего model.AddressId.Просто проверьте это.

Теперь, если вы хотите установить значение по умолчанию, убедитесь, что ваше model.AddressId имеет значение, совпадающее с выбранным по умолчанию.

...