Раскрывающийся список MVC3, который отображает свойства нескольких элементов на элемент - PullRequest
3 голосов
/ 03 декабря 2011

Я хочу, чтобы в моем представлении был раскрывающийся список, отображающий идентификатор пациента, имя и фамилию.С кодом ниже, он отображает имя каждого пациента.Как передать все три свойства в пакет просмотра и отобразить их в выпадающем списке?

Контроллер

public ActionResult Create()
            {ViewBag.Patient_ID = new SelectList(db.Patients, "Patient_ID", "First_Name");
             return View();
            } 

Просмотр

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

Спасибо.

Хорошо, я отредактировал свой код следующим образом, и я получаю сообщение об ошибке «Нет элемента ViewData типа« IEnumerable »с ключом« SelectedPatientId ».»

Controller


    public ActionResult Create()
            {
                var model = new MyViewModel();

        {
             var Patients = db.Patients.ToList().Select(p => new SelectListItem
            {
                Value = p.Patient_ID.ToString(),
                Text = string.Format("{0}-{1}-{2}", p.Patient_ID, p.First_Name, p.Last_Name)
            });

            var Prescribers = db.Prescribers.ToList().Select(p => new SelectListItem
    {
        Value = p.DEA_Number.ToString(),
        Text = string.Format("{0}-{1}-{2}", p.DEA_Number, p.First_Name, p.Last_Name)
    });

            var Drugs = db.Drugs.ToList().Select(p => new SelectListItem
            {
                Value = p.NDC.ToString(),
                Text = string.Format("{0}-{1}-{2}", p.NDC, p.Name, p.Price)
            });


        };
                return View(model);
            }

ViewМодель

    public class MyViewModel
        {
            [Required]
            public int? SelectedPatientId { get; set; }
            public IEnumerable<SelectListItem> Patients { get; set; }

            [Required]
            public int? SelectedPrescriber { get; set; }
            public IEnumerable<SelectListItem> Prescribers { get; set; }

            [Required]
            public int? SelectedDrug { get; set; }
            public IEnumerable<SelectListItem> Drugs { get; set; }
        }

Вид

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)

     @Html.DropDownListFor(
        x => x.SelectedPatientId,
        Model.Patients,
        "-- Select patient ---"
    )
    @Html.ValidationMessageFor(x => x.SelectedPatientId)
    <button type="submit">OK</button>

         @Html.DropDownListFor(
        x => x.SelectedPrescriber,
        Model.Patients,
        "-- Select prescriber ---"
    )
    @Html.ValidationMessageFor(x => x.SelectedPrescriber)
    <button type="submit">OK</button>
}

Ответы [ 2 ]

1 голос
/ 04 декабря 2011

Простой способ сделать это, просто создав дополнительное свойство в вашей модели, либо изменив класс модели, либо добавив / изменив частичный класс

[NotMapped]
public string DisplayFormat
{
    get
    {
      return string.Format("{0}-{1}-{2}", Patient_ID, First_Name, Last_Name);
    }  
}
1 голос
/ 03 декабря 2011

Я бы порекомендовал вам вообще не использовать ViewBag и определить модель вида:

public class MyViewModel
{
    [Required]
    public int? SelectedPatientId { get; set; }
    public IEnumerable<SelectListItem> Patients { get; set; }
}

, а затем запустите действие вашего контроллера и передайте эту модель представления в представление:

public ActionResult Create()
{
    var model = new MyViewModel
    {
        Patients = db.Patients.ToList().Select(p => new SelectListItem
        {
            Value = p.Patient_ID.ToString(),
            Text = string.Format("{0}-{1}-{2}", p.Patient_ID, p.First_Name, p.Last_Name)
        });
    };
    return View(model);
} 

и, наконец, в вашем строго типизированном виде отобразите выпадающий список:

@model MyViewModel
@using (Html.BeginForm())
{
    @Html.DropDownListFor(
        x => x.SelectedPatientId, 
        Model.Patients, 
        "-- Select patient ---"
    )
    @Html.ValidationMessageFor(x => x.SelectedPatientId)
    <button type="submit">OK</button>
}
...