2012-05-11 113 views
11

工作,我有一個性別選擇字段(請選擇 - ,男,女),我填充,在我的控制器。當頁面加載時,我希望在頁面加載時自動選擇在模型pm.Gender中選擇的性別。SelectListItem =真不鑑於

pm.Gender值回來爲:

  • 「」
  • 「M」
  • 「F」

查看:

<%: Model.Gender %> 
<%: Html.DropDownListFor(m => m.Gender, (IEnumerable<SelectListItem>)ViewData["gender"], new { @class = "span2" })%> 

控制器:

gender = new[] { "Select", "Male", "Female" }; 
List<SelectListItem> genderselectList = new List<SelectListItem>(); 
foreach (string item in gender) 
{ 
    SelectListItem sli = new SelectListItem { Text = item, Value = item }; 

    if (item.Trim().StartsWith(pm.Gender)) 
     sli.Selected = true; 

    genderselectList.Add(sli); 
} 

ViewData["gender"] = genderselectList; 

調試應用程序後,我可以看到,genderselectList包含Selected = true對於被假定要選擇的適當的值的正確的數據。但是,當頁面加載時,在下拉列表中沒有選擇任何應該使用Html.DropDownListFor生成的內容。

編輯:不以任何瀏覽器。

任何人都知道這可能是造成這個問題呢?任何幫助,將不勝感激。

乾杯。

編輯:
好了,所以這是我執行卡夫的解決方案後,做(實施卡夫的解決方案後)。

查看:

<%: Html.DropDownListFor(m => m.Gender, (SelectList)(ViewData["gender"]), new { @class = "span2" }) %> 

控制器:

gender = new[] { "Select", "Male", "Female" }; 
List<SelectList> genderselectList = new List<SelectList>(); 
foreach (string item in gender) 
{ 
    SelectList sli; 

    if (item.Trim().StartsWith(pm.Gender)) 
     sli = new SelectList(GetGender(), item, item, item); 
    else 
     sli = new SelectList(GetGender(), item, item); 
     //without selectedValue 

    genderselectList.Add(sli); 
} 

ViewData["gender"] = genderselectList; 

當我這樣做,我得到以下異常:
Unable to cast object of type 'System.Collections.Generic.List`1[System.Web.Mvc.SelectList]' to type 'System.Web.Mvc.SelectList'.

任何人都知道我是什麼做錯了?

+0

這是隻在IE9?我有一個類似的問題,但我無法解決。 – akatakritos

+0

它不適用於任何瀏覽器。 –

+0

使用'ViewData [「gender」] = new SelectList(GetGender(),「Key」,「Value」,「Male」);'在我的答案中。你沒有使用它,因爲我發佈,但混合起來。 – Kaf

回答

22

我認爲這是更好,如果你使用強類型屬性的SelectList(而不是使用ViewBag/ViewData的)。我相信你所期望的是,你的下拉列表可以通過模型中的性別選擇進行預選。這裏是一個解決方案(代碼是不是100%乾淨。但是這將工作)

型號

public class TestModel 
{ 
    public string Gender { get; set; } 

    public IEnumerable<SelectListItem> GenderList 
    { 
     get 
     { 
      List<SelectListItem> list = new List<SelectListItem> { new SelectListItem() { Text = "Select", Value = "Select" }, new SelectListItem() { Text = "Male", Value = "Male" }, new SelectListItem() { Text = "Female", Value = "Female" } }; 
      return list.Select(l => new SelectListItem { Selected = (l.Value == Gender), Text = l.Text, Value = l.Value }); 
     } 
    } 
} 

控制器動作

public ActionResult MyView() 
{ 
    TestModel m = new TestModel(); 
    m.Gender = "Female"; 
    return View(m); 
} 

MyView.cshtml

@model TestModel 

@{ 
    ViewBag.Title = "MyView"; 
} 

<h2>MyView</h2> 
@using (Html.BeginForm()) 
{ 
    <div> 
      @Html.DropDownListFor(model => model.Gender, Model.GenderList) 
    </div> 
} 

OUTPUT

下拉與 '女' 選項選擇

enter image description here

編輯

基於評論發現下面的鏈接,以樣本項目

1)https://github.com/prashanth-t/DropdownDemo_BareBones(使用MVC 4空模板。以最低限度較小的文件大小)

2)https://github.com/prashanth-t/DropdownDemo(使用MVC 4互聯網應用程序模板文件也就越大)

+1

感謝您的回答。一旦我得到它,我會讓你知道。 –

+1

感謝您的解決方案。有效。歡呼聲:) –

+1

歡迎您光臨;很高興我可以幫助:)在MVC 4中 –

2

嘗試此相反在控制器:

string[] gender = new string[] {"Male", "Female"}; 
string selectedGender = gender.Where(x => x.StartsWith(pm.gender)).FirstOrDefault(); 
ViewData["gender"] = new SelectList(gender, selectedGender); 

並在視圖:

<%: Html.Dropdownlist(x => x.Gender, ViewData["gender"], "Select") %> 
+0

這似乎是一個例外:c:\ Windows \ Microsoft。NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files \ root \ a2ddcf57 \ 568ca5cc \ App_Web_index.aspx.73c2a466.g30mf9nu.0.cs(423):error CS1026:)expected –

+0

您錯過了某處的結束頁面。糾正缺少的括號(我的未經編輯的代碼中沒有)並讓我知道它是否有效。 – ristonj

3

方法與選擇獲得性別:

private Dictionary<string,string> GetGender(){ 
    Dictionary<string, string> myDic = new Dictionary<string, string>(); 
    myDic.Add(System.DBNull.Value.ToString(), "Select"); 
    myDic.Add("Male", "Male"); 
    myDic.Add("Female", "Female"); 
    return myDic; 
} 

在控制器:

//without selectedValue 
ViewData["gender"] = new SelectList(GetGender(), "Key", "Value"); 

OR

//"Male" as selectedValue 
ViewData["gender"] = new SelectList(GetGender(), "Key", "Value", "Male"); 

在視圖:

Html.DropDownListFor(m => m.Gender, (SelectList)(ViewData["gender"]), 
         new { @class = "span2" }) 
+0

編輯:不。這沒有用。 –

+0

好的。讓我稍微玩一下。我會很快回復你的。謝謝 –

+0

在實施您的解決方案後,我更新了我的問題,但我仍然收到異常。你能看看我做錯了嗎?謝謝 –

0

試試這個。

public static List<SelectListItem> ListSexo { get; } = new List<SelectListItem> 
    { 
     new SelectListItem{Selected =true, Value="N", Text="Seleccione"}, 
     new SelectListItem{Value="F", Text="Femenino"}, 
     new SelectListItem{Value="M", Text="Masculino"} 
    }; 

<select asp-for="Sexo" asp-items="Commons.ListSexo" class="form-control"></select>