簡體   English   中英

在ASP.NET MVC 2中實現DropDownList的最佳方法?

[英]Best way of implementing DropDownList in ASP.NET MVC 2?

我試圖了解使用DropDownListFor幫助程序在ASP.NET MVC 2中實現DropDownList的最佳方法。 這是一個多部分的問題。

首先,將列表數據傳遞給視圖的最佳方法是什么?

  1. 使用包含數據的SelectList屬性傳遞模型中的列表
  2. 通過ViewData傳遞列表

如何在DropDownList獲取空值? 我應該在創建時將其構建到SelectList ,還是有其他方法告訴助手自動創建空值?

最后,如果由於某種原因存在服務器端錯誤並且我需要使用DropDownList重新顯示屏幕,我是否需要再次獲取列表值以傳遞到視圖模型? 帖子之間沒有維護這些數據(至少當我通過我的視圖模型傳遞它時),所以我只是再次獲取它(它被緩存)。 我正確地談到這個嗎?

最好的辦法是在Controller中創建一個SelectList - 在這里使用我的擴展方法: http//blog.wekeroad.com/2010/01/20/my-favorite-helpers-for-aspnet-mvc

使用與您的屬性名稱相同的鍵將其彈出到ViewData中: ViewData["statusid"]=MySelectList

然后只需使用Html.DropDownFor(x=>x.StatusID)就可以了。

部分回答:

  1. 恕我直言的最佳方式是在ViewModel傳遞列表,如下所示:

     public SelectList Colors { get { // Getting a list of Colors from the database for example... List<Color> colors = GetColors().ToList(); // Returning a SelectList to be used on the View side return new SelectList(colors, "Value", "Name"); } } 
  2. 要獲得像( - 選擇顏色 - )這樣的空白或默認選項,您可以在視圖側執行此操作:

     @Html.DropDownListFor(m => m.Color, Model.Colors, "-- Pick a color --") 
  3. 如果它是ViewModel的一部分,則必須再次獲取/填充列表。


看看以下博客文章。 它可以給你一些提示:

下拉列表和ASP.NET MVC

你可以這樣做:

<%= Html.DropDownListFor((x => x.ListItems), Model.ListItems, "")%>

要么

<%= Html.DropDownList("ListItems", Model.ListItems, "")%>

最后一個參數'optionLabel'生成一個空白列表項

在這種情況下,您可以看到ListItems是模型的屬性。

我也把視圖強烈地輸入了模型。

(你已經知道了!)

  1. 使用包含數據的SelectList屬性傳遞模型中的列表

是的,在構建SelectList時添加它。 (如果使用LINQ構建列表,Union可能會派上用場。)

是的,做的,是的。

我發現使用一系列SelectListItems(而不是SelectList)更直觀。

例如,這將從一系列客戶對象創建一個IEnumerable<SelectListItem> ,您可以將其傳遞給Html.DropDownListFor(...)幫助程序。 “已選擇”屬性可選擇在下拉列表中設置默認項。

var customers = ... // Get Customers
var items = customers.Select(c => new SelectListItem
                             {
                                 Selected = (c.Id == selectedCustomerId),
                                 Text = c.Email,
                                 Value = c.Id.ToString()
                             }); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM