2014-08-28 94 views
2

我很新的MVC 4,我試圖創建一個下拉列表,使用我從SQL中拉出的數據庫中的多個表。他們使汽車的模型和顏色都在不同的表格中。從MVC中的ViewModel創建一個下拉列表4

繼承人我的ViewModel

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using Car_ProjectKW.Models; 

namespace Car_ProjectKW.ViewModels 

{ 
public class InventoryViewModel 
{ 
    public List<Color> Colors { get; set; } 
    public List<Make> Make { get; set; } 
    public List<Model> Model { get; set; } 
} 
} 

這裏是我的控制器

public ActionResult DealerInventory() 
    { 
     InventoryViewModel viewModel = new 
     InventoryViewModel(); 
     viewModel.Colors = db.Colors.ToList(); 
     viewModel.Make = db.Makes.ToList(); 
     viewModel.Model = db.Models.ToList(); 


     return View(); 

,並終於在這裏是我的看法......我不知道這是否是這樣做,因爲這樣的正確方法是什麼給我一個錯誤

@model Car_ProjectKW.ViewModels.InventoryViewModel 
     @{ 
      ViewBag.Title = "DealerInventory"; 
     } 

<h2> Drop Down</h2> 
<div> 
@*Html.DropDownList("Make")*@ 
<select> 
    @{foreach (var item in Model.Make){ 
      <option value="@item.MakeDescription">@item.MakeDescription</option> 

    }} 
</select> 
</div> 

我很新!任何幫助將是巨大的

+0

拋出什麼錯誤? – mxmissile 2014-08-28 14:31:41

+0

如果你的模型沒有給你從列表中選擇一個值的選項,那麼有一個下拉列表的目的是什麼? – Marko 2014-08-28 14:36:12

回答

3

控制器 -

var PayList = db.Pay.ToList(); 
ViewBag.PayList = new SelectList(PayList, "Id", "Name"); 

視圖 -

@Html.DropDownList("Pay", ViewBag.PayList) 

這是在剃刀中使用Html擴展綁定Dropdown的正確方法。你也應該退房@Html.DropDownListFor

0

需要更多細節上的錯誤,也改變你的循環,這樣的:

@foreach (var item in Model.Make){ 
      <option value="@item.MakeDescription">@item.MakeDescription</option> 

    } 
4

首先我不明白爲什麼你需要下降,如果你的模型沒有機制來捕獲下拉選擇的值。因此,我將第一次修改你的模型是這樣的:

public class InventoryViewModel 
{ 
    public int ColorId { get; set; } 
    public int MakeId { get; set; } 
    public int ModelId { get; set; } 
    public List<Color> Colors { get; set; } 
    public List<Make> Make { get; set; } 
    public List<Model> Model { get; set; } 
} 

然後我會做一個擴展方法對任何的IEnumerable轉換成的SelectList:

namespace System 
{ 
    public static class SelectListExtensions 
    { 
     public static SelectList ToSelectList<T>(this IEnumerable<T> items, string dataValueField, string dataTextField) where T : class 
     { 
     return new SelectList(items, dataValueField, dataTextField); 
     } 
    } 
} 

然後在我看來,我想這行產生一個下拉:

@Html.DropDownListFor(m => m.ColorId, Model.Colors.ToSelectList("ColorId", "ColorName"), "-- SELECT --") 

假設你的顏色類具有ColorId和ColorName ...

0

溝ViewBag和使用強類型的模型

@Html.DropDownListFor(x => x.LeagueId, Model.LeagueSL, "--Select League--", new { id = "ddlLeague"}) 

public ActionResult Index() 
    { 
     BaseballViewModel model = new BaseballViewModel(); 

     using (BaseballEntities context = new BaseballEntities()) 
     { 
      var leagueList = context.League.ToList(); 

      foreach (var item in leagueList) 
      { 
       model.LeagueSL.Add(new SelectListItem() { Text = item.LeagueName, Value = item.LeagueId.ToString() }); 
      } 

     } 
     return View(model); 
    } 

這裏的模型屬性,它是最好的實例是在構造函數中。

public List<SelectListItem> LeagueSL { get; set; }