在 MVC5 中创建一个下拉列表
Posted
技术标签:
【中文标题】在 MVC5 中创建一个下拉列表【英文标题】:creating a drop down list in MVC5 【发布时间】:2014-05-09 10:33:12 【问题描述】:我正在尝试创建一个下拉列表,但它给了我一个错误,提示“无法将类型“字符串”隐式转换为“System.Web.Mvc.SelectList”。我的代码如下:
应用数据库模型:
public string dropdown get; set;
应用视图模型:
public SelectList dropdown get; set;
ApplicationService.cs:
public static SelectList GetDropdownList(string currSelection)
List<SelectListItem> list = new List<SelectListItem>();
list.Add(new SelectListItem Value = "1", Text = "firstvalue" );
list.Add(new SelectListItem Value = "2", Text = "secondvalure" );
list.Add(new SelectListItem Value = "3", Text = "All of the Above" );
return new SelectList(list, "Value", "Text", currSelection);
在我正在调用的控制器中:
applicationviewmodel.dropdown= ApplicationService.GetDropdownList(null);
and then trying to save it in database as:
ApplicationDatabaseModel.dropdown= applicationviewmodel.dropdown;
这是我得到这个错误的地方。
在我看来,我有:
@html.DropDownListFor(x => x.dropdown, applicationviewmodel.dropdown)
我不知道如何进行这项工作。
【问题讨论】:
ApplicationDatabaseModel.dropdown
是什么类型? string
?
是的。它是从数据库创建的模型
好吧,ApplicationDatabaseModel.dropdown = applicationviewmodel.dropdown
说“请将SelectList
对象分配给string
”。这就是你的问题所在。您建议如何将整个SelectList
实例存储在string
中?您需要考虑如何做到这一点.. 编译器不会为您做到这一点。
还有其他方法可以创建下拉列表吗?
你明白你的代码有什么问题吗(我刚才是怎么解释的)?
【参考方案1】:
我发现将 List 作为模型的一部分并使用简单的 linq 语句更容易。下面是国家下拉列表的简单示例:
假设你有这样的模型
public class MyModel()
public int CountryId get; set;
public List<Country> Countries get; set;
和一个国家类
public class Country()
public int Id get; set;
public string Name get; set;
在您看来,您可以执行以下操作:
@Html.DropDownListFor(m => m.CountryId,
Model.Countries.Select(x =>
new SelectListItem Text = x.Name, Value = x.Id.ToString(), Selected = Model.CountryId == x.Id , "Please Select...", null)
【讨论】:
【参考方案2】:这个:
@Html.DropDownListFor(x => x.dropdown, applicationviewmodel.dropdown)
..不正确。它正在尝试将所选项目存储到SelectList
实例中。
你想要的是视图模型上的 string
变量,该值被选择到:
public class ApplicationViewModel
public SelectList DropDown get; set;
public string SelectedDropDownValue get; set;
// .. the rest of the properties here
那么你的视图就变成了这样:
@Html.DropDownListFor(x => x.SelectedDropDownValue, Model.DropDown)
这表示“将选定的值存储到SelectedDropDownValue
”。
然后,您需要更改构建SelectList
的方式。 Value
是发布到您的财产的内容。Text
是浏览器中显示的内容。
所以这个:
list.Add(new SelectListItem Value = "1", Text = "firstvalue" );
list.Add(new SelectListItem Value = "2", Text = "secondvalure" );
list.Add(new SelectListItem Value = "3", Text = "All of the Above" );
..必须是这样的:
list.Add(new SelectListItem Value = "firstvalue", Text = "firstvalue" );
list.Add(new SelectListItem Value = "secondvalue", Text = "secondvalure" );
list.Add(new SelectListItem Value = "all of the above", Text = "All of the Above" );
..因为它们是字符串(当然,除非您想要回发这些数字)。
然后,最后,你的控制器代码变成这样:
// assign the string value to the string property
ApplicationDatabaseModel.dropdown = applicationviewmodel.SelectedDropDownValue;
【讨论】:
我已经尝试过了,但它给了我一个错误'没有类型为 'IEnumerable以上是关于在 MVC5 中创建一个下拉列表的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 React js JSX 在下拉列表中创建年份列表