C# @Html.dropdownlist对于使用ViewBag SelectedListItem,不显示所选项目

C# @Html.dropdownlist对于使用ViewBag SelectedListItem,不显示所选项目,c#,asp.net,.net,C#,Asp.net,.net,我的代码如下: 控制器: foreach (Employee engineer in engineers) { if (!model.Customer.PrimaryEngineerId.Equals(engineer.EmployeeId)) { engineersListPrimary.Add(new SelectListItem { Text = engineer.FirstName + '

我的代码如下:

控制器:

foreach (Employee engineer in engineers)
{                       
       if (!model.Customer.PrimaryEngineerId.Equals(engineer.EmployeeId)) 
       {
            engineersListPrimary.Add(new SelectListItem { Text = engineer.FirstName + ' ' + engineer.LastName, Value = engineer.EmployeeId, Selected = false});
       }
       else
       {
            engineersListPrimary.Add(new SelectListItem { Text = engineer.FirstName + ' ' + engineer.LastName, Value = engineer.EmployeeId, Selected = true });
       }                 
}
ViewBag.engineersListPrimary = engineersListPrimary;
return View(model);
@Html.DropDownListFor(m => m.Customer.PrimaryEngineer, (IEnumerable<SelectListItem>)ViewBag.engineersListPrimary, new { style = "width:100%;"})
查看:

foreach (Employee engineer in engineers)
{                       
       if (!model.Customer.PrimaryEngineerId.Equals(engineer.EmployeeId)) 
       {
            engineersListPrimary.Add(new SelectListItem { Text = engineer.FirstName + ' ' + engineer.LastName, Value = engineer.EmployeeId, Selected = false});
       }
       else
       {
            engineersListPrimary.Add(new SelectListItem { Text = engineer.FirstName + ' ' + engineer.LastName, Value = engineer.EmployeeId, Selected = true });
       }                 
}
ViewBag.engineersListPrimary = engineersListPrimary;
return View(model);
@Html.DropDownListFor(m => m.Customer.PrimaryEngineer, (IEnumerable<SelectListItem>)ViewBag.engineersListPrimary, new { style = "width:100%;"})
@Html.DropDownListFor(m=>m.Customer.PrimaryEngineer,(IEnumerable)ViewBag.engineersListPrimary,新{style=“width:100%;”})
在搜索了很多并尝试了很多不同的方法之后,我无法打印所选的值

问题:

foreach (Employee engineer in engineers)
{                       
       if (!model.Customer.PrimaryEngineerId.Equals(engineer.EmployeeId)) 
       {
            engineersListPrimary.Add(new SelectListItem { Text = engineer.FirstName + ' ' + engineer.LastName, Value = engineer.EmployeeId, Selected = false});
       }
       else
       {
            engineersListPrimary.Add(new SelectListItem { Text = engineer.FirstName + ' ' + engineer.LastName, Value = engineer.EmployeeId, Selected = true });
       }                 
}
ViewBag.engineersListPrimary = engineersListPrimary;
return View(model);
@Html.DropDownListFor(m => m.Customer.PrimaryEngineer, (IEnumerable<SelectListItem>)ViewBag.engineersListPrimary, new { style = "width:100%;"})
所选值不会显示在视图中使用的下拉列表中

调试后,我已检查engineersListPrimary是否正确填充(正确插入Selected=true行),因此问题必须保留在视图中


有什么建议吗??谢谢你的回答

试试这样的东西

@Html.DropDownListFor(model => model.SelectedID, new SelectList(model.PrimaryEngineer, "Value", "Text"), "optionalLabel",  new { style = "width:100%;"})

问题在于这个表达式:

m => m.Customer.PrimaryEngineer
DropDownListFor期望此lambda提供您正试图通过此输入控件设置的属性。在您的情况下,这不是
m.Customer.PrimaryEngineer
,而是
m.Customer.PrimaryEngineerId
,因此应该解决它:

m => m.Customer.PrimaryEngineerId

还请注意,在使用DropDownList for时,不需要设置列表项的
Selected
属性,因为此帮助程序可以根据提供的模型值派生所选项。

我看到的最佳方法是使用
SelectList()
来执行此操作

用以下代码替换foreach循环代码,就可以开始了:

ViewBag.engineersListPrimary = new SelectList(engineers,
                                             "EmployeeId",
                                             "FirstName",
                                             model.Customer.PrimaryEngineerId);
return View(model);
鉴于:

@Html.DropDownListFor(m => m.Customer.PrimaryEngineer, 
                           ViewBag.engineersListPrimary as SelectList, 
                           new { style = "width:100%;"})
MSDN文件:
参见

我假设
m=>m.Customer.PrimaryEngineer
后面缺少的逗号只是问题中的一个输入错误。如果您在
@Html.DropDownListFor
行上放置断点,则
ViewBag.engineersListPrimary
是否仍然正确?是的,逗号在我的代码中,我已将其更正为发布的代码。
ViewBag.engineersListPrimary
正确地填充了所选的=真值。但正如@Andrei所说,我必须将
m=>m.Customer.PrimaryEngineer
更改为
m=>m.Customer.primaryengineerinid
,并自动填充所选值。谢谢你的回答!是的,它有效!即使ViewBag没有将属性Selected设置为true,它也会在DropDownList for中正确选择工程师。我想在内部将值设置为Selected=true,否?谢谢你的回答@Alvykun,坦白说,我还没有检查过。但是你的假设看起来很有可能me@Alvykun与其如此混乱和重复使用
SelectList
class,还不如查看我的帖子以获得更多的澄清