2011-12-03 10 views
3

私のビューには患者のID、名、姓を表示するドロップダウンリストが必要です。下のコードでは、各患者の名字が表示されます。どのように3つのプロパティすべてをビューバックに渡してドロップダウンリストに表示させることができますか?アイテムごとに複数のプロパティを表示するMVC3ドロップダウンリスト

コントローラ

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> 

感謝。

私は次のように自分のコードを編集しました。エラーが発生しました。 "キーが 'SelectedPatientId'であるタイプ 'IEnumerable'のViewDataアイテムがありません。

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); 
      } 

ビューモデル

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> 
} 
+0

Tha tエラーは通常あなたの商品リストがヌルであることを意味します –

答えて

1

私はまったくViewBagを使用して、ビューモデルを定義することではない、あなたをお勧めします:

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

、その後はあなたのコントローラのアクションの塗りつぶしを持っていると表示するには、このビューモデルを渡しますことを達成するために

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

私はこのアプローチを使用できるとは思わない。患者名のリストを含むDropDownListに加えて、他のエンティティからのデータを含む他のドロップダウンリストもあります。私の作成ビューは、Models.Rxを強くタイプします。 Rxには、患者、処方者、薬物の関係が含まれています。あなたのアプローチに従えば、私は "MyViewModel"の中にないものを引き出すことはできませんが、それは正しいのですか? – HendPro12

+0

私は自分のコードを編集して上に貼り付けました。 – HendPro12

+0

@DanielHendrix、更新された例では、処方者のドロップダウンを保持する別のフィールドを正しく追加しました。そして、あなたの作成ビューでこのビューモデル( 'var model = new MyViewModel()')をインスタンス化すると、あなたのデータベースなどにクエリを行い、患者、Prescribers、薬物などのローカル変数に結果を格納しますが、あなたのビューモデルのプロパティの。 'model.Patients = patients;を設定する必要があります。ビューに戻る前に... –

1

簡単な方法:あなたの強く型付けされたビューで

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); 
} 

、最終的には、ドロップダウンリストを表示モデルクラスを変更するか、または部分クラスを追加/変更することによって、モデルに追加のプロパティを作成するだけです。

[NotMapped] 
public string DisplayFormat 
{ 
    get 
    { 
     return string.Format("{0}-{1}-{2}", Patient_ID, First_Name, Last_Name); 
    } 
} 
+0

モデルを変更するときに次のエラーが発生します。私はデータベースファーストアプローチを使用しました。エラーエラー3004:行561から始まるマッピングフラグメントの問題:Set PatientsのプロパティPatient.DisplayListにマッピングが指定されていません。 エンティティのタイプが[CAHODModel.Patient] – HendPro12

+0

の場合、キー(PK)付きエンティティは往復しません。そのパラメータに[NotMapped]という接頭辞を付ける必要があります。サンプルを更新しました。 http://msdn.microsoft.com/en-us/data/gg193958を参照してください。 – torm

関連する問題