C# 如何将数据库中的品牌名称列表放入下拉列表

C# 如何将数据库中的品牌名称列表放入下拉列表,c#,asp.net,asp.net-mvc,asp.net-mvc-4,razor,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Razor,我正在尝试使用Html.DropDownListFor将医疗产品品牌名称列表放在edit.cshtml文件的下拉列表中。我正在尝试正确使用Html助手,但我的努力没有成功。Model.BrandSelectListItem是一个IEnumerable,应该放在DropDownList中 此外,我不明白为什么我需要在lambda表达式中将模型引用为“model”,而在以下代码段的第二个参数中将其引用为“model”: @Html.DropDownListFor(model => model.

我正在尝试使用Html.DropDownListFor将医疗产品品牌名称列表放在edit.cshtml文件的下拉列表中。我正在尝试正确使用Html助手,但我的努力没有成功。Model.BrandSelectListItem是一个IEnumerable,应该放在DropDownList中

此外,我不明白为什么我需要在lambda表达式中将模型引用为“model”,而在以下代码段的第二个参数中将其引用为“model”:

@Html.DropDownListFor(model => model.BrandName, Model.BrandSelectListItem)
执行代码时,我收到以下运行时错误:

具有键“BrandName”的ViewData项的类型为 “System.String”,但必须是“IEnumerable”类型

以下是一些可能与此错误相关的类:

医药产品 医学产品映射器 Edit.cshtml 此外,我不明白为什么我需要将模型引用为“模型” 在lambda表达式中,但在 以下代码段:

@Html.DropDownListFor(model => model.BrandName, Model.BrandSelectListItem)
您不需要在lambda表达式中将其作为模型引用。在=>符号前面的lambda的第一部分,您只需指定参数,并且可以根据需要命名它们

anything => anything.BrandName
工作原理与使用模型代替任何东西一样

在本例中,lambda表达式可以将其视为如下所示的方法

TProperty GetPropertyYouWantToCreateADropdownFor(MedicalPropertyViewModel model)
{
    return model.BrandName
}
关于下拉列表,这里有一篇很好的帖子,解释如何创建下拉列表

编辑

我插入了除映射器之外的所有代码,只是对ViewModel做了一个小小的伪实现。你的代码运行得很好

这是我用来装假控制器的

 var viewModel = new MedicalProductViewModel
 {
     BrandID = 12,
     BrandName = "Some Brand",
     ID = 6,
     Name = "Some Name",
     Price = 12.27,
     BrandSelectListItem = new List<SelectListItem>()
     {
           new SelectListItem() {Text = "Item 1", Value = "1"},
           new SelectListItem() {Text = "Item 2", Value = "2"}
     }
 };

 return View(viewModel);
差不多

var queryBrands = dbBrands.Select(b => new SelectListItem() 
                                 {
                                     Text = b.PropertyWithWhatYouWantToDisplay,
                                     Value = b.PropertyYouWantAsTheValue,
                                     Selected = //true if you want this item selected, false otherwise
                                 });

查看我在这里的答案,关于如何构建下拉列表我编辑了我的答案,您对此仍有问题吗?我在问题中用//注释更新了名为MedicalProductMapper的类,该注释说明调试器显示的BrandListSelectItem等于什么。注释显示:BrandSelectListItem在执行此赋值语句之前为“null”。并且在语句执行后保持null,为什么?有关问题分配语句的位置,请参阅类。很可能是因为您试图将queryBrands强制转换为SelectListItem的IENumber表。SelectListItem有三个属性:Selected、Text和Value。我刚刚添加了第二次编辑。另外:我试着插入你的假名单,结果成功了。
anything => anything.BrandName
TProperty GetPropertyYouWantToCreateADropdownFor(MedicalPropertyViewModel model)
{
    return model.BrandName
}
 var viewModel = new MedicalProductViewModel
 {
     BrandID = 12,
     BrandName = "Some Brand",
     ID = 6,
     Name = "Some Name",
     Price = 12.27,
     BrandSelectListItem = new List<SelectListItem>()
     {
           new SelectListItem() {Text = "Item 1", Value = "1"},
           new SelectListItem() {Text = "Item 2", Value = "2"}
     }
 };

 return View(viewModel);
var queryBrands = from b in dbBrands
                      select b;
var queryBrands = dbBrands.Select(b => new SelectListItem() 
                                 {
                                     Text = b.PropertyWithWhatYouWantToDisplay,
                                     Value = b.PropertyYouWantAsTheValue,
                                     Selected = //true if you want this item selected, false otherwise
                                 });