C# 根据dropdownlist中的模型为

C# 根据dropdownlist中的模型为,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我有使用控制器中的viewBag填充的下拉值 ViewBag.Excursion = excursions_List.ResultList.Select(x => new SelectListItem() { Text = x.ExcursionName, Value = x.ExcursionName, }); 下面是我在视图中使用的代码。 对于这个场景,我有model.siftion的价值。但它不会在下拉值中被选中。下拉列表仍显示空值

我有使用控制器中的viewBag填充的下拉值

ViewBag.Excursion = excursions_List.ResultList.Select(x => new SelectListItem()
{
      Text = x.ExcursionName,
      Value = x.ExcursionName,
});
下面是我在视图中使用的代码。 对于这个场景,我有model.siftion的价值。但它不会在下拉值中被选中。下拉列表仍显示空值

                       @Html.DropDownListFor(model => model.Excursion, new SelectList(ViewBag.Excursion, "Value", "Text"), " ", new { @class = "form-control" })
有人能指出我在这里做错了什么吗

谢谢。

在您的视图中执行此操作:

@{
List<SelectListItem> packages = ViewBag.PackageList as List<SelectListItem>;
}

@Html.DropDownListFor(model => model.IssuedFor, packages, "Select a Package", new { id = "issuedFor", @class = "form-control" })
如果您将id分配给IssuedFor作为值,并且在下拉列表中使用包名作为值,那么它将不起作用。
ddl中的值和IssuedFor应匹配

如果
IssuedFor
的值与其中一个选项值匹配,则将选择该选项。另外,使用新的选择列表(…)从第一个列表创建一个相同的
IEnumerable
,这是毫无意义的额外开销。只需使用
@Html.DropDownListFor(model=>model.IssuedFor,new(IEnumerable)ViewBag.PackageList,”,new{id=“IssuedFor”,“form control”})
引用这些问题:&。另外,添加
new{id=“IssuedFor”}
也不是必需的-该方法已经生成
id=“IssuedFor”
@StephenMuecke。对于一些下拉值,上面的代码工作正常。但在同一视图中,某些下拉列表值没有正确显示。它显示空值。我仍在努力解决这个问题。我是否也必须在控制器中设置“选定”选项?我刚刚看到了您的编辑。绑定到的属性和
选择列表的名称不能相同。参考将
ViewBag
名称更改为
游览列表
,它将正常工作。但无论如何,您不应该使用
ViewBag
。编辑数据时,请始终使用视图模型,该模型将包含一个属性
IEnumerablet,这一点都没有区别@史蒂芬穆克:亲爱的,我还没有完全明白我的答案:)但是谢谢你的提示!!你不知道OP想要绑定到什么@alaa_sayegh,我也希望使用x.PackageName的值…我关心的是,这是为具有一些下拉值的相同视图工作。我也在工作场景中使用相同的代码。我只是检查模型数据和查看数据。它们是一样的。但不在下拉列表中显示选定的值。@kateferna然后您需要检查ViewBag.PackageList(包)中的项目,并检查IssuedFor的值。如果下拉列表中存在该值,则该选项应该有效。你能截屏IssuedFor值和下拉列表值吗。重要!!-您还应该确保表单中没有与下拉列表id“issuedFor”相同的任何其他控件
ViewBag.PackageList = pkgList.ResultList.Select(x => new SelectListItem()
{
    Text = x.PackageName,
    Value = x.Id, //use the id
});