Asp.net mvc 5 为什么DropDownList的默认值不能正常工作?

Asp.net mvc 5 为什么DropDownList的默认值不能正常工作?,asp.net-mvc-5,html.dropdownlistfor,Asp.net Mvc 5,Html.dropdownlistfor,无论出于何种原因,我的Html.DropDownListFor的默认值不起作用: @Html.DropDownListFor(model => model.DomainList, new SelectList(Model.DomainList, "DomainId", "Name", Model.SingleDomain.DomainId), new { @class = "form-control" }) 知道为什么吗 更新 根据下面的答案,我将代码更新为: @Html

无论出于何种原因,我的Html.DropDownListFor的默认值不起作用:

@Html.DropDownListFor(model => model.DomainList,
    new SelectList(Model.DomainList, "DomainId", "Name", Model.SingleDomain.DomainId),
    new { @class = "form-control" })
知道为什么吗

更新

根据下面的答案,我将代码更新为:

@Html.DropDownListFor(model => model.SelectedDomain, 
    new SelectList(Model.DomainList, "DomainId", "Name", Model.SelectedDomain),
    "Select a Domain", 
    new { @class = "form-control" })
试试这个:

在ViewModel中,添加一个整数以存储选定的域id:

public int SelectedDomainId { get; set; }
将DropDownListFor更改为:

@Html.DropDownListFor(model => model.SelectedDomainId,
    new SelectList(Model.DomainList, "DomainId", "Name", Model.SingleDomain.DomainId),
    new { @class = "form-control" })
@Html.DropDownListFor(model => model.SelectedDomain,
        new SelectList(Model.DomainList, "DomainId", "Name", Model.SingleDomain.DomainId),
        new { @class = "form-control" })
现在,在您的回帖中,所选id将发布在SelectedDomainId中

或者,您可以将单个域对象添加到VM(以指示选择了哪个域对象):

并将您的DropDownListFor更改为:

@Html.DropDownListFor(model => model.SelectedDomainId,
    new SelectList(Model.DomainList, "DomainId", "Name", Model.SingleDomain.DomainId),
    new { @class = "form-control" })
@Html.DropDownListFor(model => model.SelectedDomain,
        new SelectList(Model.DomainList, "DomainId", "Name", Model.SingleDomain.DomainId),
        new { @class = "form-control" })
我通常使用选定的ID,但我认为两者都可以

下面是另一个很好的例子:


如果有人在使用
Html.DropdownList时遇到问题,请记住

@Html.DropDownList(“Country”,ViewBag.Country as List)
-->未选择默认值

@Html.DropDownList(“国家”,ViewBag.Country as List)
-->选择默认值


有关更多详细信息,请参阅:

是Model.DomainList中值列表中Model.SingleDomain.DomainId的值吗?是。即使我输入了一个已知存在的值而不是该变量,dropdownlist也不会设置默认值。此外,通常在执行dropdownlist for时,它是用于int(存储所选值),而不是列表本身。意思是它应该是这样的:@Html.DropDownListFor(x=>x.DomainId,…)当然可以,但是有什么线索可以解释为什么默认选中的项目不起作用吗?你有没有尝试我上次的评论建议?