C# ASP MVC4:所选选项不在带有Html属性的@Html.DropDownList的顶部

C# ASP MVC4:所选选项不在带有Html属性的@Html.DropDownList的顶部,c#,asp.net-mvc-4,razor,html-select,C#,Asp.net Mvc 4,Razor,Html Select,在我的~/viewName/Controllers/edit.cshtml页面中有一个编辑页面。 通过控制器的编辑操作,DropDownList数据来自此Viewbag: ViewBag.PROJECT_NO = new SelectList(db.TRAINING_PROJECT, "PROJECT_NO", "PROJECT_NAME", training_new.PROJECT_NO); 当我转到编辑页面时,默认设置为 @Html.DropDownList("PROJECT_NO",

在我的~/viewName/Controllers/edit.cshtml页面中有一个编辑页面。 通过控制器的编辑操作,DropDownList数据来自此Viewbag:

 ViewBag.PROJECT_NO = new SelectList(db.TRAINING_PROJECT, "PROJECT_NO", "PROJECT_NAME",
 training_new.PROJECT_NO);
当我转到编辑页面时,默认设置为

@Html.DropDownList("PROJECT_NO", String.Empty)
将显示其相应的选定值和底部的其他值。当我添加一些html属性,如class、id、required、disabled时,我在edit.cshtml中执行了下面的代码

@Html.DropDownList("PROJECT_NO", null, String.Empty, new {@class = "form-control input-sm",
@id = "ex2" })
现在我的DropDownList没有显示所选的值。相反,它显示的是空值,表示所选值为空,底部显示其他值。但在这里,我想看看选中的一个。下图将详细描述默认输出和第二个输出

试试这个:

IEnumerable<SelectListItem> selectList = 
    from c in db.TRAINING_PROJECT
    select new SelectListItem
    {
        Selected = (c.ProjectId == 1), //put your condition here 
        Text = c.ProjectName , //MyAssumption, put yours here
        Value = c.ProjectId //My assumption, put yours here
    };

ViewBag.PROJECT_NO = selectList;

您使用了错误的重载,您需要像这样使用:

旁注: 您不需要在id之前加前缀@,我们为类加上if,因为类在c中是一个保留字,所以要将它用作变量,我们需要在它前面加前缀@

,只需尝试以下方法:

写出来的时候

@Html.DropDownList("PROJECT_NO", null, String.Empty, new {@class = "form-control input-sm",@id = "ex2" })

它将String.Empty作为DropDownList标题

@Darin Dimitrov您能帮我解决这个问题吗?为什么要将null作为选项列表传递?PROJECT_NO是您模型中的属性吗?。如果是这样,您需要将SelectList分配给一个ViewBag属性,该属性的名称与属性名称不同。哦,我忘了它是一个带有项目编号和项目名称的视图包。ViewBag.PROJECT\u NO=新建SelectListdb.TRAINING\u PROJECT、PROJECT\u NO、PROJECT\u NAME、TRAINING\u new.PROJECT\u NO;谢谢,但是你有一个名为PROJECT_NO的属性的模型吗?在这种情况下,你做得不对,这会有什么不同。OP已经正确地生成了SelectList。我已经测试了上面提到的场景,它与我提到的解决方案配合得很好。就个人而言,我喜欢这种方法,而不是ViewBag方法。我已经读到很多人在那里建议自己使用这种方法。OP目前的用法也很好!这与问题无关。问题是在视图中使用@Html.DropDownList。您只是展示了一种生成IEnumerable的不同方式,并且正在使用ViewBag。如果您注意到,我的解决方案并不依赖于ViewBag。第二,我不怀疑其他人提出的解决办法。这只是另一种方式,OP的解决方案也不依赖于ViewBag
@Html.DropDownList("PROJECT_NO", null, new {@class = "form-control input-sm",@id = "ex2" })
@Html.DropDownList("PROJECT_NO", null, String.Empty, new {@class = "form-control input-sm",@id = "ex2" })