Asp.net mvc 在DropDownList中选择项目时,Selected未设置为true

Asp.net mvc 在DropDownList中选择项目时,Selected未设置为true,asp.net-mvc,asp.net-mvc-4,razor,Asp.net Mvc,Asp.net Mvc 4,Razor,我已经看到,但仍不清楚以下内容: 我有一个SelectListItem,我这样填充: MySelectList.Insert(0, new SelectListItem { Text = "Text0", Value = "0" }); MySelectList.Insert(1, new SelectListItem { Text = "Text1", Value = "1" }); @Html.DropDownListFor(m => m.MyId, Model.MySelectLi

我已经看到,但仍不清楚以下内容:

我有一个SelectListItem,我这样填充:

MySelectList.Insert(0, new SelectListItem { Text = "Text0", Value = "0" });
MySelectList.Insert(1, new SelectListItem { Text = "Text1", Value = "1" });
@Html.DropDownListFor(m => m.MyId, Model.MySelectList, new { @class = "form-control" })
在我看来,我是这样显示的:

MySelectList.Insert(0, new SelectListItem { Text = "Text0", Value = "0" });
MySelectList.Insert(1, new SelectListItem { Text = "Text1", Value = "1" });
@Html.DropDownListFor(m => m.MyId, Model.MySelectList, new { @class = "form-control" })
如果我选择Text0并将模型发布到控制器,MyId包含所选值,这是完美的

但当我浏览MySelectList时,列表中的任何项目的选定值都不会设置为true:


我知道我可以使用MyId查找所选的值,但是当用户从下拉列表中选择一个项目并发布表单时,有没有办法将selected设置为true?

这并不意味着框架会自动更新。当您检查HTTP请求时,您会注意到只传输MyId的值。当通过模型绑定器重建目标视图模型时,当您看到其中的一些数据时,根本不会填充MySelectList,这可能是因为您在请求后再次填充它

当然,您可以自己轻松地执行更新:

var selectedItem = Model.MySelectList.FirstOrDefault(x => x.Value == Model.MyId);
if (selectedItem != null)
{
    selectedItem.Selected = true;
}

问题是,它是否有助于您的进一步处理。

可能重复@Justcode:谢谢。你是指Ehsan Sajjad的回答吗?我可能在这里遗漏了一些东西,但答案是解释如何发布所选文本,而不是设置所选标志。解释了它的内部工作原理非常感谢。我在我的模型构造函数中放置了一个断点,您完全正确,没有传入select列表项。