2011-12-09 57 views
0

我是相當新的ASP.NET MVC和正在尋找幫助解決以下問題。可重複使用的DropDownList內容

我在視圖中有一個DropDownList控件。所選值將存儲在我的模型的整數字段中。

我的選擇是不要硬編碼標記中的文本和值。另外,我希望能夠在其他視圖的DropDownList控件中使用相同的文本和值列表。

我不知道是否需要創建一個類來初始化這些值的地方,或者我可能需要一個擴展方法。我可以用一些指導來解決這個問題。

+0

將使用部分視圖符合您的需求? – chardymcdennis

+0

@chardymcdennis:我不這麼認爲。 –

回答

2

這是一個示例:

var apps = _webAppRepo.GetAll(); 

IList<SelectListItem> appSelectListItems = new List<SelectListItem>(); 

foreach (var item in apps) { 

    appSelectListItems.Add(new SelectListItem { 
     Text = item.ApplicationName, 
     Value = item.WebApplicationID.ToString() 
    }); 
} 

ViewBag.AppSelectListItems = appSelectListItems; 

這是你如何使用它您可以查看:

@Html.DropDownListFor(model => 
     model.WebApplicationID, 
     (IEnumerable<SelectListItem>)ViewBag.AppSelectListItems 
) 

如果你想使用它沒有一個模型,這是這樣的:

@Html.DropDownList("Foo", 
     (IEnumerable<SelectListItem>)ViewBag.AppSelectListItems 
) 
1

有很多方法可以做到這一點,但是您可能會比在視圖模型中存儲這些值並將它們渲染到p年齡。我只是用Tuple做爲一個例子:

public class MyViewModel 
{ 
    List<Tuple<int, string>> items_ = new List<Tuple<int, string>>(); 

    public MyViewModel() 
    { 
     items_.Add(new Tuple<int, string>(1, "Item1")); 
     items_.Add(new Tuple<int, string>(2, "Item2")); 
     // etc 
    } 

    public List<Tuple<int, string>> Items { get { return items_; } } 
} 

你的控制器:

public class MyController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(new MyViewModel()); 
    } 
} 

您的看法:

@model MyNameSpace.MyViewModel 


<select id="mySelect" name="mySelect> 
    @{foreach(Tuple<int, string> item in Model.Items){ 
     <option value="@item.Item1">@item.Item2</option> 
    }} 
</select> 

當然,你也可以做一個推廣的方法來創建組合框以更有趣的方式:)

+1

Woww,你再次探索美國。爲什麼不使用內置的Html Helpers之一? – tugberk

+0

@tugberk,主要目的是在視圖模型中顯示組合框的存儲項目。 –

+0

這也是如此,你的方法是完全合法的,但仍然看起來不適合我。 MVC團隊已經爲此創建了一個類:'SelectListItem' – tugberk

0

你應該填充你的DropDownList從數據庫表或從內存中讀取xml文件。

您應該可以使用相同的數據在視圖上填充任何其他ddl。