在 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' 的 ViewData 项目具有键 'model.selecteddropdownvalue'

以上是关于在 MVC5 中创建一个下拉列表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 React js JSX 在下拉列表中创建年份列表

如何在使用模板的 word 文档中创建下拉列表?

在剑道模板中创建剑道下拉列表

从 Excel 的下拉列表中检索选定的值(在 C# 中创建)

如何在 Flutter 中创建自定义下拉列表?

如何使用 .kv 文件在 kivy 中创建下拉列表