C# 使用DropdownFor将null作为默认值传递
我有一个下拉列表的问题,因为我需要他不是强制性的。我发现了一些可以为null的解决方案,比如int?,但这只适用于int、datetime等。但我在模型中的类型是其他对象(参考)。简单地说,我有团队结构,一些团队没有父团队,因此引用应该为null,那么我如何才能不必选择下拉列表,并获得父团队的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()
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
是一个复杂的对象(typeofTeam
)。您不能绑定是的您是对的应该是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});