C# 使用DropdownFor将null作为默认值传递

C# 使用DropdownFor将null作为默认值传递,c#,asp.net-mvc,drop-down-menu,C#,Asp.net Mvc,Drop Down Menu,我有一个下拉列表的问题,因为我需要他不是强制性的。我发现了一些可以为null的解决方案,比如int?,但这只适用于int、datetime等。但我在模型中的类型是其他对象(参考)。简单地说,我有团队结构,一些团队没有父团队,因此引用应该为null,那么我如何才能不必选择下拉列表,并获得父团队的null值 模型(简化): 控制器: var listTeam = (from team in listOfTeams.AsEnumerable()

我有一个下拉列表的问题,因为我需要他不是强制性的。我发现了一些可以为null的解决方案,比如int?,但这只适用于int、datetime等。但我在模型中的类型是其他对象(参考)。简单地说,我有团队结构,一些团队没有父团队,因此引用应该为null,那么我如何才能不必选择下拉列表,并获得父团队的null值

模型(简化):

控制器:

     var listTeam = (from team in listOfTeams.AsEnumerable()
                        select new SelectListItem
                        {
                            Text = team.Name,
                            Value = team.ID.ToString()
                        }).ToList();

        SelectList dropDownlistOfTeams = new SelectList(listTeam, "Value", "Text");
和视图:

    <div class="form-group">
            @Html.LabelFor(model => model.ParentTeam, new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownListFor(model => model.ParentTeam, (SelectList)ViewBag.ListOfTeams, "-- Set Parent --")
            </div>
        </div>

@LabelFor(model=>model.ParentTeam,新的{@class=“control label col-md-2”})
@Html.DropDownListFor(model=>model.ParentTeam,(SelectList)ViewBag.ListOfTeams,“--Set Parent-->”)

事先非常感谢。

在控制器中,只需添加一个空团队即可

listTeam.Add(new SelectListItem() {Text="None", Value=null});

ParentTeam
是一个复杂的对象(typeof
Team
)。您不能绑定
是的您是对的应该是
model.ParentTeam.ID
而不是
model.ParentTeam
。老实说,我在一些教程中发现了SelectList()代码,所以我认为这是最佳实践(我自己学习C#MVC,所以我想我有很多脏代码)。注意,根据您接受的答案,您不应该也不应该添加带有
null
值的select列表项。您的
DropDownList()
方法已经在添加带有
null
值的默认标签选项(尽管它可能应该是
“--请选择父项--”
或更具描述性的内容。如果选择该选项,则
null
将发布到controller@StephenMuecke我以前尝试过,但它仍然强制下拉某些值-无法提交表单。我假设您误解了一些概念。您只能将select元素绑定到值ttype,不是一个复杂的对象,因此
model.ParentTeam.ID
将起作用,但
model.ParentTeam
将不起作用。如果
ParentTeam
ID
属性为
int
,则发回
null
将导致验证错误,因为和
int
不能为null。使用
value=“”添加第二个选项
根据公认的答案,这对解决您的问题毫无帮助。
listTeam.Add(new SelectListItem() {Text="None", Value=null});