DropdownListFor в форме Razor из данных на основе пользователя - PullRequest
0 голосов
/ 06 декабря 2018

Мне нужна небольшая помощь с этим выпадающим списком.У меня есть форма, в которой я хотел бы, чтобы местоположение клиента было выбранным.У меня есть модель представления, которая заполняет все, что мне нужно, но я бы хотел, чтобы местоположение выбиралось.У каждого клиента должна быть хотя бы 1 запись, поэтому, на мой взгляд, мне, вероятно, потребуется получить счет с оператором «если», прежде чем заполнять раскрывающийся список, а если есть только 1, просто используйте его в качестве EditorFor.Местоположение извлекается из таблицы адресов вместе с именем клиента, извлекаемым из таблицы клиентов.

Я попытался выполнить

ViewBag.Locations = new SelectList(db.Addresses, "AddressId", "LocationName");

Однако текущая настройка модели происходит из таблицы адресов, и столбец не является списком IEnumerable SelectList.Ниже моя модель:

public class AddEventViewModel
{
    public static AddEventViewModel GetCustomerInfo(string userId, CustomerEntities db)
    {
        var QCustInfo = from ad in db.Addresses
                        join ua in db.UserToAddresses on ad.AddressId equals ua.AddressId
                        join cus in db.CustomerNames on ad.CustomerId equals cus.CustomerId
                        where (ua.UserId == userId)
                        select new AddEventViewModel
                        {
                            CustomerId = cus.CustomerId,
                            CustomerName = cus.CustomerName,
                            Location = ad.LocationName
                        };
        var result = QCustInfo.SingleOrDefault();

        return result;
    }

    public int CustomerId { get; set; }
    [Display(Name = "Location Name")]
    public string Location { get; set; }
    public bool AllDay { get; set; }
    [Display(Name ="Title")]
    public string Title { get; set; }
    [Display(Name = "Description")]
    public string Description { get; set; }
    [DataType(DataType.DateTime), Required]
    [DisplayFormat(DataFormatString = "{0:dd/mm/yyyy}", ApplyFormatInEditMode = true)]
    [Display(Name = "Start Date")]
    public DateTime StartDate { get; set; }
    [DataType(DataType.DateTime), Required]
    [DisplayFormat(DataFormatString = "{0:dd/mm/yyyy}", ApplyFormatInEditMode = true)]
    [Display(Name = "End Date")]
    public DateTime EndDate { get; set; }
    [Display(Name = "Customer Name")]
    public string CustomerName { get; set; }

    public virtual CustomerNames Customer { get; set; }
    public virtual IEnumerable<Addresses> Addresses { get; set; }

Форма - это просто базовая форма с полями и работами. Мне просто нужно, чтобы местоположение было выбрано.Создание другой viewModel, кажется, не подходит для моей текущей настройки, так как это объединение с реальной моделью таблицы.Спасибо за вашу помощь.

1 Ответ

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

Получается, что все, что мне нужно было сделать, это добавить.

new SelectList(Model.Addresses, "AddressId", "LocationName"),

Чтобы код Html.DropdownListFor вверху не изменился.Вот полная строка.

 @Html.DropDownListFor(model => model.Location, new SelectList(Model.Addresses, "AddressId", "LocationName"), new { htmlAttributes = new { @class = "form-control" } })
...