如何从下拉列表中获取字符串

时间:2010-08-19 22:30:57

标签: asp.net asp.net-mvc asp.net-mvc-2

我的控制器中有这个代码用于索引视图..

 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框中显示的字符串。

我收到整数值?

是某些我做错了

感谢

3 个答案:

答案 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 ...