2009-02-24 222 views
6

我正在使用ASP MVC RC1。如何使用Html.DropDownList設置默認選項的值

我正在使用的表單包含一個下拉列表,我已將該代碼放入視圖中。

<%= Html.DropDownList("areaid", (SelectList)ViewData["AreaId"], "Select Area Id")%> 

然而,渲染時,這就是我得到

<select id="areaid" name="areaid"> 
    <option value="">Select Area Id</option> 
    <option value="1">Home</option> 
    ... 
</select> 

我想什麼是選擇區域ID選項,0值並將其標記在默認情況下爲選擇,以它與其他值一致,我可以驗證是否選擇了一個區域,因爲它是一個強制值。 AreaId是一個整數,所以當我當前單擊表單時完全不觸及下拉列表,MVC會抱怨「」不是整數,並且給我一個綁定錯誤。

那麼我該如何爲默認選項設置一個值,然後在表單上選中它?

感謝,丹

回答

21

我覺得你有四個選項。首先,當您構建您的SelectList或SelectItemList的可枚舉時,請在您的選項標籤和默認值前加上選擇。如果尚未在模型中選擇其他值,則將其置於頂部將使其成爲默認值。其次,您可以使用循環創建選項,在視圖中「手動」構建選擇(和選項)。同樣,如果在模型中沒有提供默認選擇,則預先設置默認選擇。第三,使用DropDownList擴展,但在加載頁面後使用javascript修改第一個選項的值。

似乎無法使用DropDownList擴展名將值分配給optionLabel,因爲它被硬編碼爲使用string.Empty。以下是http://www.codeplex.com/aspnet的相關代碼片段。

// Make optionLabel the first item that gets rendered. 
    if (optionLabel != null) { 
     listItemBuilder.AppendLine(ListItemToOption(new SelectListItem() { Text = optionLabel, Value = String.Empty, Selected = false })); 
    } 

編輯:最後,最好的辦法是讓你的模型取空值並將其標記爲使用RequiredAttribute標籤要求。我建議使用視圖特定的模型而不是視圖的實體模型。由於該值爲可空,因此如果未選擇值而回發,則空字符串將正常工作。將其設置爲必需值將導致模型驗證失敗,並顯示相應的消息,表明該值是必需的。這將允許您按原樣使用DropdownList幫助程序。

public AreaViewModel 
{ 
    [Required] 
    public int? AreaId { get; set; } 

    public IEnumerable<SelectListItem> Areas { get; set; } 
    ... 
} 

@Html.DropDownListFor(model => model.AreaId, Model.Areas, "Select Area Id") 
+1

謝謝。我現在創建一個List 對象,在索引0處插入一個值爲0的默認選項並將其傳遞給Html.DropDownList。它工作的一種享受。 – Hmobius 2009-02-24 15:51:20

+0

謝謝,幫助我!很遺憾,即使使用MVC 3,也無法添加默認值:/ – LanFeusT 2011-06-20 22:38:05

3

對於MVC3,SelectList有一個重載,您可以定義選定的值。

Function Create() As ViewResult 

     ViewBag.EmployeeId = New SelectList(db.Employees, "Id", "Name", 1) 

     Return View() 

    End Function 

在這種情況下,我碰巧知道1是我想要的默認列表項的ID,但想必你可以選擇通過查詢或默認什麼都你的船浮筒

0

強似的視圖中定義的默認項目,您可以在控制器列表的第0個索引處添加「選擇區域」數據。

這樣的選擇區域的數據具有0

0

我想用多個下拉菜單相同的SelectList,不想重複選擇列表的模型,所以我只是增加了一個新的索引值Html擴展方法提取了一個值並設置了所選項目。

public static MvcHtmlString DropDownList(this HtmlHelper htmlHelper, string name, string value, IList<SelectListItem> selectList, object htmlAttributes) 
{ 
    IEnumerable<SelectListItem> items = selectList.Select(s => new SelectListItem {Text = s.Text, Value = s.Value, Selected = s.Value == value}); 
    return htmlHelper.DropDownList(name, items, null /* optionLabel */, htmlAttributes); 
}