簡體   English   中英

來自 SelectList 的 ASP.NET MVC 下拉列表

[英]ASP.NET MVC Dropdown List From SelectList

我正在我的控制器中構建以下SelectList

var u = new NewUser();

u.UserTypeOptions = new SelectList(new List<SelectListItem>
{
    new SelectListItem { Selected = true, Text = string.Empty, Value = "-1"},
    new SelectListItem { Selected = false, Text = "Homeowner", Value = ((int)UserType.Homeowner).ToString()},
    new SelectListItem { Selected = false, Text = "Contractor", Value = ((int)UserType.Contractor).ToString()},
});

return u;

並像這樣在我的視圖上顯示它:

@Html.DropDownListFor(m => m.UserType, Model.UserTypeOptions)

看起來我在應該是一個非常簡單的下拉列表中為其提供了一組有效的SelectListItem ,但是我沒有獲得具有良好值和文本的有效<option>列表,而是得到了這個:

<select data-val="true" data-val-range="A user type must be selected." data-val-range-max="2" data-val-range-min="1" data-val-required="The UserType field is required." id="UserType" name="UserType" class="input-validation-error">
    <option>System.Web.Mvc.SelectListItem</option>
    <option>System.Web.Mvc.SelectListItem</option>
    <option>System.Web.Mvc.SelectListItem</option>
</select>

是什么賦予了? 據我所知,這應該有效。

您缺少在 SelectList 本身中設置TextValue字段。 這就是為什么它對列表中的每個對象執行.ToString()的原因。 您可能會認為,鑒於它是一個SelectListItem列表,它應該足夠聰明地檢測到這一點……但事實並非如此。

u.UserTypeOptions = new SelectList(
    new List<SelectListItem>
    {
        new SelectListItem { Selected = true, Text = string.Empty, Value = "-1"},
        new SelectListItem { Selected = false, Text = "Homeowner", Value = ((int)UserType.Homeowner).ToString()},
        new SelectListItem { Selected = false, Text = "Contractor", Value = ((int)UserType.Contractor).ToString()},
    }, "Value" , "Text", 1);

順便說一句,您可以使用任何類型的列表或數組...然后只需設置將充當文本和值的屬性的名稱。

我認為最好這樣做:

u.UserTypeOptions = new SelectList(
    new List<SelectListItem>
    {
        new SelectListItem { Text = "Homeowner", Value = ((int)UserType.Homeowner).ToString()},
        new SelectListItem { Text = "Contractor", Value = ((int)UserType.Contractor).ToString()},
    }, "Value" , "Text");

我刪除了-1項,每個項的設置都選擇了真/假。

那么,在你看來:

@Html.DropDownListFor(m => m.UserType, Model.UserTypeOptions, "Select one")

這樣,如果您設置了“選擇一項”項,並且在 SelectList 中沒有將一項設置為選中,則UserType將為 null( UserType需要為int? )。

如果您需要將 SelectList 項目之一設置為選中,您可以使用:

u.UserTypeOptions = new SelectList(options, "Value" , "Text", userIdToBeSelected);

正如評論中解釋的用戶之一:當使用DropDownListFor()綁定到屬性時,SelectList 構造函數的第四個選項被忽略 - 它是屬性的值,決定了選擇的內容。

用剃須刀試試這個

@{
    var selectList = new SelectList(
        new List<SelectListItem>
        {
            new SelectListItem {Text = "Google", Value = "Google"},
            new SelectListItem {Text = "Other", Value = "Other"},
        }, "Value", "Text");
}

接着

@Html.DropDownListFor(m => m.YourFieldName, selectList, "Default label", new { @class = "css-class" })

或者

@Html.DropDownList("ddlDropDownList", selectList, "Default label", new { @class = "css-class" })

試試這個,只是一個例子:

u.UserTypeOptions = new SelectList(new[]
    {
        new { ID="1", Name="name1" },
        new { ID="2", Name="name2" },
        new { ID="3", Name="name3" },
    }, "ID", "Name", 1);

或者

u.UserTypeOptions = new SelectList(new List<SelectListItem>
    {
        new SelectListItem { Selected = true, Text = string.Empty, Value = "-1"},
        new SelectListItem { Selected = false, Text = "Homeowner", Value = "2"},
        new SelectListItem { Selected = false, Text = "Contractor", Value = "3"},
    },"Value","Text");
var selectList =   new List<SelectListItem>();
selectList.Add(new SelectListItem {Text = "Google", Value = "Google"}) ;
selectList.Add(new SelectListItem {Text = "Other", Value = "Other"}) ;

暫無
暫無

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

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