如何使@ Html.DropDownList()允许null

时间:2017-10-24 00:25:36

标签: c# asp.net asp.net-mvc razor

我已经使用Visual Studio从数据库自动生成控制器和视图。在数据库中,有一个表dbo.Items,其中有FOREIGN KEY (CategoryID) REFERENCES Categories(Id)

生成的项目/创建视图具有此块,强制用户在添加新项目时从下拉列表中选择01类别,不允许空值:

    <div class="form-group">
        @Html.LabelFor(model => model.CategoryID, "CategoryID", htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownList("CategoryID", null, htmlAttributes: new { @class = "form-control" })
            @Html.ValidationMessageFor(model => model.CategoryID, "", new { @class = "text-danger" })
        </div>
    </div>

如何使Null选项可用?

2 个答案:

答案 0 :(得分:1)

Html.DropDownList()是一个html辅助方法,它将生成用于呈现SELECT元素的HTML标记。它没有做任何&#34;允许/不允许&#34;事物本身。

当您根据视图模型属性和在其上定义的数据注释提交表单时,MVC模型验证框架在服务器端执行模型验证。辅助方法还生成所需的数据属性,jQuery validate插件可用于进行客户端验证。

要允许在SELECT元素中选择无选项,请将CategoryID属性更改为nullable int。如果你有一个视图模型,你可以在那里使用。

public class YourViewmodel
{
  public int? CategoryID { set;get;}
}

您还需要更新数据库模式,以便在CategoryId列中保存可空值。如果您使用的是数据库优先方法,则可以更改数据库模式(将列更改为可为空),然后重新生成实体类。

我还建议你使用DropDownListFor助手

@Html.DropDownListFor(x=>x.CategoryID,ViewBag.CountryCode as  List<SelectListItem>,
                                       "select one", new { @class = "form-control" })

假设ViewBag.CountryCode是您在GET操作方法中设置的SelectListItem的列表。

答案 1 :(得分:1)

您可以使用fallowing重载版本来显示&#34;选择选项&#34;最初...

@Html.DropDownList("CategoryID", null, "select option", new { @class = "form-control" })

每当您向CategoryID下拉列表添加选项时,您需要添加&#34;选择选项&#34;作为第一个并在那之后休息......