2013-04-05 46 views
1

我試圖在使用Razor視圖引擎的MVC4應用程序中創建客戶端驗證的下拉列表。SelectList從ViewBag拉動信息:在生成的html中不創建值=「...」

視圖中的代碼來生成下拉列表如下:

@Html.DropDownList("Test", new SelectList(ViewBag.AvailableLoBsDescriptions, ViewBag.AvailableLoBsIds), "--none--") 

注意ViewBag.AvailableLoBsDescriptions在使用一個IList控制器中創建,同時也是在控制器使用創建ViewBag.AvailableLoBsIds IList的。

我期望發生的事情是讓Razor生成一個下拉菜單,其中的Descriptions填充每個內部html,而Ids填充value =「...」。然而,沒有什麼對價值產生可言,導致這樣的事情:

<select id="Test" name="Test"><option value="">--none--</option> 
<option>N/A</option> 
<option>aaaa</option> 
<option>bbbb</option> 
<option>cccc</option> 
<option>dddd</option> 
<option>eeee</option> 
<option>ffff</option> 
</select> 

望着選擇列表的文檔,http://msdn.microsoft.com/en-us/library/system.web.mvc.selectlist%28v=vs.108%29.aspx,在我看來,這應該工作。有沒有人有一個想法,爲什麼沒有爲佔位符以外的任何東西生成值?

謝謝!

回答

1

構造您所使用如下所示:

SelectList(IEnumerable, Object) 

這裏的第二個參數指示從集合中的第一個參數當前選擇對象。它並不指定一個對象用作值列表。

你應該做的是使用SelectList(IEnumerable, String, String)。這允許您傳遞屬性的名稱(每個元素的名稱爲IEnumerable)用於描述,其中一個用於值。然後,您可以產生這樣的事情:

控制器:

// Create your IEnumerable 
var LoBs = new List<LoB>(); 

// Assign some parameters to your objects 
var exampleItem = new LoB(); 
exampleItem.Description = "Option text"; 
exampleItem.Value = "myValue"; 

// Populate your list and return your view. 
LoBs.Add(exampleItem); 
ViewBag.LoBs = LoBs; 
return View(); 

查看:

@Html.DropDownList("Test", 
    new SelectList(ViewBag.LoBs, "Value", "Description"), 
    "--none--") 

的Et瞧...

<select id="Test" name="Test"> 
    <option value="">--none--</option> 
    <option value="myValue">Option text</option> 
</select>