2013-04-15 155 views
0

我有我的視圖模型,用逗號分隔的字符串:剃刀語法顯示一個下拉列表在asp.net mvc的

vm.colours = "black, white, blue, green" 

在我的剃鬚刀頁,我想顯示一個下拉列表,所以我有:

@Html.DropDownList(m => m.colours, new SelectList(Model.colours)) 

但是,這給了我一個選擇列表項的字符串中的每個字母。

有沒有什麼辦法可以修改這個,給我一個每種顏色的選擇列表項?

謝謝

馬克

回答

2

現在你只是發送一個字符串,它只是一個字符數組,所以在這種情況下,它被解釋爲這樣。使用Split方法分隔您想要的元素。

編輯:

檢查this answer在這種情況下使用Split的代碼示例。

+0

這怎麼可能接受的答案,如果這個代碼甚至不會編譯?這是誤導其他人尋找正確的答案 –

+0

@vonv。你是對的,我只是在一個地方更新了行,並沒有檢查它。我刪除了代碼,以免誤導,我會稍後再檢查它。感謝您指出了這一點。 –

+0

不用擔心@KonradGadzina,我們都希望SO成爲開發者的好資源,所以最終的目標是獲得最好的內容。感謝您編輯您的答案;) –

0

嗯,看起來顏色是不是IEnumerable<string>只是一個string。由於SelectList將枚舉傳入的對象,這意味着在這種情況下枚舉返回所有字符的字符串。使用字符串數組請您嘗試一下:

vm.colours = new string[] { "black", "white", "blue", "green" };

Html.DropDownList呼叫保持不變。

1

@ Html.DropDownList(M => m.colours,新的SelectList(Model.colours))

DropDownList否過載接受的表達式。對於代碼工作,你需要做的是這樣的:

Html.DropDownList("give_it_a_name", new SelectList(Model.colours)) 

或者,也許你的意思是使用DropDownListFor,如果是那麼你需要兩樣東西:

  1. 的屬性,將接受的項目是從下拉
  2. 你的名單將被用來顯示選項的下拉

你的觀點應該是這樣的選擇:

public class YourVM 
{ 
    public string SelectedColor{get;set;} 
    public IEnumerable<string> Colors {get;set;} 
} 

你需要有這樣的事情在你的控制器:

var colors = "black, white, blue, green"; 
vm.colours = colors.Split(','); 

最後,在您的視圖:

@Html.DropDownListFor(m => m.colours, new SelectList(Model.Colors))