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,还不如查看我的帖子以获得更多的澄清