2017-10-19 13 views
0

別のコントローラからのドロップダウンにデータを入力しようとしています。実装された@ Html.DropDownListを持つDeviceControllerがあります。もともと、私はコントローラのドロップダウンに値を設定するコードを持っています。今私はドロップダウンのために指定されたコントローラに移動しようとしています。だから私は複数のコントローラで同じコードの代わりに1つの場所にドロップダウンを設定するコードがあります。私は元のコントローラでそれを持っているとき、私はそれを移動すると、ドロップダウン・ロードが正しくただし、ドロップダウン・コントローラは、私は次のエラーThere is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'DropDownDeviceType'.別のコントローラからのビューのドロップダウンへの埋め込み

私のビューのコード受信 - 私のDropDownControllerから

@Html.DropDownList("DropDownDeviceType", null, htmlAttributes: new { @class = "form-control" }) 

を(私が持っている場合私DeviceControllerで、それが意図したように動作し、私のDeviceControllerでこのコード)

public void PopulateDevciceType(object selectDeviceType = null) 
    { 
     string voidInd = "N"; 
     var deviceType = db.DeviceTypes 
      .Where(x => x.VoidInd == voidInd) 
      .OrderBy(x => x.DeviceType1); 

     //ViewData["DropDownDeviceType"] = new SelectList(deviceType, "DeviceTypeID", "DeviceType1", selectDeviceType); 
     ViewBag.DropDownDeviceType = new SelectList(deviceType, "DeviceTypeID", "DeviceType1", selectDeviceType); 

    } 

//Populate dropdowns 
    DropDownController dropDown = new DropDownController(); 
    dropDown.PopulateDevciceType(model.DeviceTypeID); 

答えて

0

私は、特定のタスクを専任のクラスに養成したいと考えています。しかし、私はあなたがこれを少し考え過ぎていると思います。

あなたのコードに関して実際にあなたが言っていることは100%確信していませんが、ViewBagの情報を別のコントローラ内に設定しているので、ビューを返します。その部分を正しく理解していますか?

別のコントローラクラスを作成する代わりに、リスト作成を処理し、リスト作成のみを扱う静的関数を作成します。リストを作成したら、それを返すようにしてください。その後

、あなたが移入するためのリストを必要なときに、関連するコントローラメソッドで次の操作を行います。

ViewBag.DropDownDeviceType= *wherever-your-static-method-is*.PopulateDeviceType(model.DeviceTypeID); 
関連する問題