2010-08-19 41 views
0

字符串我有我的控制器索引視圖此代碼..如何從下拉列表中

public ActionResult Index(int? id) 
     { 
      _viewModel.ServiceTypeListAll = new SelectList(_bvRepository.GetAllServiceTypes().ToList().OrderBy(n => n.ServiceTypeName).ToList(), "ServiceTypeId", "ServiceTypeName"); 
      return View(_viewModel); 
     } 

使用這個我能dispaly所有ServiceTypes在我的下拉列表框視圖。代碼

<%=Html.DropDownList("ServiceTypeListAll", new SelectList(Model.ServiceTypeListAll,"Value","Text"))%> 

當我試圖從視圖中選擇的下拉列表值到控制器我acceesing這樣的..

string categoryName = collection["ServiceTypeListAll"]; // collectoin refers FormCollection 

我期待類別名稱應該是串像我什麼都在Dropdownlist框中顯示。

我越來越整數值?

是somethign我做錯了

感謝

+0

根本不要調用'ToList()'。 – SLaks 2010-08-19 22:35:30

回答

1

一個下拉列表的值是它的ID屬性,你指定爲ServiceTypeId加載相應的對象。
你需要指定的ID爲ServiceTypeName代替,就像這樣:

_viewModel.ServiceTypeListAll = new SelectList(_bvRepository.GetAllServiceTypes().OrderBy(n => n.ServiceTypeName), "ServiceTypeName", "ServiceTypeName"); 

此外,Model.ServiceTypeListAll已經是SelectList;你不需要把它包起來:

<%=Html.DropDownList("ServiceTypeListAll", Model.ServiceTypeListAll)%> 
+0

它的工作完全符合我的期望..謝謝 – user354625 2010-08-19 22:42:48

+0

SLaks .. Can你幫我解決了我的問題!請..我會張貼不同的問題請仔細看看..謝謝 – user354625 2010-08-19 22:44:39

+0

SLaks ..請你可以看看這篇文章.. http://stackoverflow.com/questions/3526894/how-to-show- dropdownlist-value-on-edit-using-asp-net-mvc – user354625 2010-08-19 22:51:04

1

這是一個選擇框看起來像HTML

<select> 
    <option value="1">Item 1</option> 
    <option value="2">Item 2</option> 
    <option value="3">Item 3</option> 
</select> 

所以,你在你的控制器獲得的價值是從選定的值選擇框,這是一個數字。

如果你想使用的項目文本,然後有兩種可能性:

1)的期權價值得到int值後設置爲文本

public ActionResult Index(int? id) 
{ 
    _viewModel.ServiceTypeListAll = new SelectList(_bvRepository.GetAllServiceTypes().ToList().OrderBy(n => n.ServiceTypeName).ToList(), "ServiceTypeId", "ServiceTypeId"); 
    return View(_viewModel); 
} 

2)的值從你的資料庫

int categoryId = Convert.ToInt32(collection["ServiceTypeListAll"]); 
string categoryName = _bvRepository.Get(categoryId); // or whatever method loads your object 
+0

我不需要在我的控制器中需要Item1或Item 2 ..的數字。謝謝 – user354625 2010-08-19 22:37:41

+0

剛剛更新了我的答案,包括該解決方案 – davehauser 2010-08-19 22:42:58

+0

戴夫感謝您的更新和感謝您的時間.. SLaks解決方案爲我工作了不起.. 謝謝 – user354625 2010-08-19 22:50:42

1

您對Html.DropDownList(呼叫)將產生的HTML看起來像這樣:

<select name="ServiceTypeListAll"> 
    <option value="1">Service Type 1</option> 
    <option value="2">Service Type 2</option> 
    <option value="3">Service Type 3</option> 
</select> 

是爲哪個選項被選中屬性的值是什麼將出現在FormCollection中。如果你真的想ServiceTypeName字符串代替ServiceTypeId,你可以修改你的SelectList構造是這樣的:

_viewModel.ServiceTypeListAll = new SelectList(_bvRepository.GetAllServiceTypes().ToList().OrderBy(n => n.ServiceTypeName).ToList(), "ServiceTypeName", "ServiceTypeName"); 

,以生成HTML,看起來像這樣:

<select name="ServiceTypeListAll"> 
    <option value="Service Type 1">Service Type 1</option> 
    <option value="Service Type 2">Service Type 2</option> 
    <option value="Service Type 3">Service Type 3</option> 
</select> 

另外,順便說一句,你應該可以簡化您的HtmlHelper調用此:

<%=Html.DropDownList("ServiceTypeListAll", Model.ServiceTypeListAll)%> 

無需創建另一個的SelectList ...

+0

感謝您的時間彼得.. – user354625 2010-08-19 23:07:29