Model view controller 通过使用SelectList的强类型模型,使用DropDownList for(非DropDownList)生成选定属性

Model view controller 通过使用SelectList的强类型模型,使用DropDownList for(非DropDownList)生成选定属性,model-view-controller,html.dropdownlistfor,selected,strongly-typed-dataset,selectlist,Model View Controller,Html.dropdownlistfor,Selected,Strongly Typed Dataset,Selectlist,我尝试用控制器传递的viewModel填充dropdownlist,主要目标是设置选定的属性标记,以便在下拉列表加载下拉列表中的特定项时选中该项。我正在使用MVC5和Razor 有很多关于DropDownListFor的问题,但不幸的是,我还没有找到我想要的 我已经找到了许多可以使用viewbags的解决方案,但我认为这不是 我要找的是,我想通过 强类型模型。 我要使用的Html帮助程序是@Html.DropDownListFor,而不是@Html.DropDownList。据我所知,用For后

我尝试用控制器传递的viewModel填充dropdownlist,主要目标是设置选定的属性标记,以便在下拉列表加载下拉列表中的特定项时选中该项。我正在使用MVC5和Razor

有很多关于DropDownListFor的问题,但不幸的是,我还没有找到我想要的

我已经找到了许多可以使用viewbags的解决方案,但我认为这不是 我要找的是,我想通过 强类型模型。 我要使用的Html帮助程序是@Html.DropDownListFor,而不是@Html.DropDownList。据我所知,用For后置的helper使用linq表达式重载,它们用于处理模型,并且是强类型的,而非后置的For则用于viewbags。 这就是它的样子,默认选择的城市应该是蒙扎

目前,我只使用@Html.DropDownList实现了这个结果,正如前面所说,这不是我的意图,我希望使用@Html.DropDownListFor实现相同的结果。为了便于编制文档,代码如下:

此方法使用@Html.DropDownList

模型

视图模型

public class AccountIndexGetVM
{
    public UserData userData = new UserData();
    public AddressUser addressUser = new AddressUser();
    public IEnumerable<SelectListItem> cities { get; set; } //<--Cities to DDL
}
看法 在中创建下拉列表

@using MyProject.ViewModels.Account
@model AccountIndexGetVM
//some code...
<td>@Html.LabelFor(m => m.addressUser.City.Name)</td>
<td>@Html.DropDownList("CityAttributeIDVAlue", Model.cities, "Please Select a City")</td>
HTML源代码结果

<td><select id="CityAttributeIDVAlue" name="CityAttributeIDVAlue"><option value="">Please Select a City</option>
<option value="277">Aosta</option>
<option value="4156">Meda</option>
<option value="4175">Melegnano</option>
<option value="4310">Milano</option>
<option selected="selected" value="4750">Monza</option> <!--Selected is PRESENT-->
</select></td>
此方法使用@Html.DropDownListFor

正如您所看到的,默认选择的ddl项目不是select,而是选择了可选的请选择一个城市。这不是我的意图,加载ddl时应该选择Monza,并且HTML选项标记中应该存在一个选定的属性

我所做的唯一更改是在视图中,这是代码,并使用了DropDownList for helper:

看法

生成的HTML

<td><select id="cities" name="cities"><option value="">Please Select a City</option>
<option value="277">Aosta</option>
<option value="4156">Meda</option>
<option value="4175">Melegnano</option>
<option value="4310">Milano</option>
<option value="4750">Monza</option>  <!--No selected attribute present-->
</select></td>
问题:
是否有一种方法可以使用DropDownList for Html helper在Html ddl中生成选定的标记,或者唯一的方法是DropDownList?

我不确定Select helpers的区别。我将此列表与视图模型一起传递

List<SelectListItem> citySelectList = new List<SelectListItem>();
cityList = cities.GetAll().OrderBy(x => x.DESCRIPTION).ToList();

foreach (var city in cityList)
{
    citySelectList .Add(new SelectListItem() 
    {
        Value = city.ID, 
        Text = city.Desc, 
        Selected = true 
    });
}
    <td>@Html.LabelFor(m => m.addressUser.City.Name)</td>
    <td>@Html.DropDownListFor(m => m.cities, (IEnumerable<SelectListItem>)Model.cities, "Please Select a City")</td>
<td><select id="cities" name="cities"><option value="">Please Select a City</option>
<option value="277">Aosta</option>
<option value="4156">Meda</option>
<option value="4175">Melegnano</option>
<option value="4310">Milano</option>
<option value="4750">Monza</option>  <!--No selected attribute present-->
</select></td>
List<SelectListItem> citySelectList = new List<SelectListItem>();
cityList = cities.GetAll().OrderBy(x => x.DESCRIPTION).ToList();

foreach (var city in cityList)
{
    citySelectList .Add(new SelectListItem() 
    {
        Value = city.ID, 
        Text = city.Desc, 
        Selected = true 
    });
}
@Html.DropDownListFor(x => x.City, Model.CitySelectList, "", new { id = "citySelectID" })