Переопределить столбец представления раскрывающегося списка (MVC3, Entity Framework) - PullRequest
0 голосов
/ 21 мая 2011

Когда я использую автоматическое создание контроллеров / моделей / представлений из структуры и дизайнера сущностей, я получаю довольно чистую форму редактирования. Одно из соотношений 1: 1 создает раскрывающийся список, который представляет пользователю значения из определенного столбца, но я хочу, чтобы он использовал другой столбец / свойство.

Как это сделать?

(К вашему сведению, я не ищу класс в MVVM и как его изолировать в модели представления. У меня нет пропускной способности для изучения и воссоздания этого приложения с классами модели представления.)

    <div class="editor-label">
        @Html.LabelFor(model => model.Domain, "Domain1")
    </div>
    <div class="editor-field">
        @Html.DropDownList("Domain", String.Empty))
        @Html.ValidationMessageFor(model => model.Domain)
    </div>

Контроллер:

    public ActionResult Edit(int id)
    {
        ClientJob clientjob = db.ClientJobs.Find(id);
        ViewBag.ClientId = new SelectList(db.Clients, "Id", "ClientName", clientjob.ClientId);
        ViewBag.CurrencyType = new SelectList(db.CurrencyTypes, "Id", "TypeName", clientjob.CurrencyType);
        ViewBag.Domain = new SelectList(db.Domains, "Id", "DomainName", clientjob.Domain);
        ViewBag.JobType = new SelectList(db.JobTypes, "Id", "JobTypeName", clientjob.JobType);
        ViewBag.DatabaseServer = new SelectList(db.Servers, "Id", "ServerName", clientjob.DatabaseServer);
        ViewBag.ProcessingServer = new SelectList(db.Servers, "Id", "ServerName", clientjob.ProcessingServer);
        ViewBag.QueryServer = new SelectList(db.Servers, "Id", "ServerName", clientjob.QueryServer);
        return View(clientjob);
    }

Ответы [ 3 ]

1 голос
/ 21 мая 2011

Если я правильно понимаю ваш вопрос, вы хотите передать список предметов для показа вместо значения по умолчанию?

Я делаю это так:

<div class="editor-label">
    @Html.LabelFor(model => model.Domain, "Domain1")
</div>
<div class="editor-field">
    @Html.DropDownListfor(model => model.Domain, ViewData["DomainSelects"] as IEnumerable<SelectListItem>, "Select domain")
    @Html.ValidationMessageFor(model => model.Domain)
</div>

И затем в вашем контроллере обязательно установите DomainSelects в данных просмотра. Свойство value SelectListItem - это значение, которое должно быть установлено для «domain». Так что если это FK, то это будет id.

Я использую такой код (псевдокод)

ViewData["DomainSelects"] = domains.Select(domain => new SelectListItem() { Value = SqlFunctions.StringConvert((double)domain.Id), Text = domain.Name});
0 голосов
/ 21 мая 2011

В вашем контроллере подготовьте весь список

ViewBag.YourTypeCollection = context.YourTypes.ToList();

А в поле зрения

@Html.DropDownListFor(m => m.Domain, 
     new SelectList((IEnumerable<YourType>)ViewBag.YourTypeCollection,
     "Id",
     "Name",
     Model.Domain==null?1:Model.Domain.Id))

Id - это поле идентификатора класса, а Name - это поле, которое вы хотите показать. Замените их значениями, подходящими для вашей модели. В моем примере, если значение модели равно нулю, я выбираю первый элемент.

0 голосов
/ 21 мая 2011

Созданный автоматически код только что созданных списков выбора:

ViewBag.Domain = new SelectList(db.Domains, "Id", "DomainName", clientjob.Domain);

Мне просто нужно было изменить имя столбца в списке выбора:

ViewBag.Domain = new SelectList(db.Domains, "Id", "DomainType", clientjob.Domain);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...