我的控制器中有这个代码用于索引视图..
public ActionResult Index(int? id)
{
_viewModel.ServiceTypeListAll = new SelectList(_bvRepository.GetAllServiceTypes().ToList().OrderBy(n => n.ServiceTypeName).ToList(), "ServiceTypeId", "ServiceTypeName");
return View(_viewModel);
}
使用此功能,我可以在下拉列表框中显示视图中的所有ServiceType。代码是
<%=Html.DropDownList("ServiceTypeListAll", new SelectList(Model.ServiceTypeListAll,"Value","Text"))%>
当我试图从View到控制器获取Selected Dropdownlist值时,我正在加载这样的...
string categoryName = collection["ServiceTypeListAll"]; // collectoin refers FormCollection
我期待CategoryName应该是我在Dropdownlist框中显示的字符串。
我收到整数值?
是某些我做错了
感谢
答案 0 :(得分:1)
这是HTML中的选择框
<select>
<option value="1">Item 1</option>
<option value="2">Item 2</option>
<option value="3">Item 3</option>
</select>
因此,您在控制器中获得的值是选择框中的选定值,这是一个数字。
如果您想使用项目文本,则有两种可能性:
1)将选项的值设置为文本的值
public ActionResult Index(int? id)
{
_viewModel.ServiceTypeListAll = new SelectList(_bvRepository.GetAllServiceTypes().ToList().OrderBy(n => n.ServiceTypeName).ToList(), "ServiceTypeId", "ServiceTypeId");
return View(_viewModel);
}
2)获取int值后,从存储库加载适当的对象
int categoryId = Convert.ToInt32(collection["ServiceTypeListAll"]);
string categoryName = _bvRepository.Get(categoryId); // or whatever method loads your object
答案 1 :(得分: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)%>
答案 2 :(得分: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>
value属性适用于选择的任何选项是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 ...