asp.net 如何让@Html.DropDownList()允许null

3npbholx  于 2023-05-30  发布在  .NET
关注(0)|答案(3)|浏览(135)

我使用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选项可用?

hvvq6cgz

hvvq6cgz1#

Html.DropDownList()是一个html helper方法,它将生成用于呈现SELECT元素的HTML标记。它本身不会做任何“允许/不允许”的事情。
MVC模型验证框架在您提交表单时根据视图模型属性和在其上定义的数据注解在服务器端进行模型验证。helper方法还生成所需的数据属性,jQuery validate插件可以使用这些属性进行客户端验证。
要允许在SELECT元素中不选择任何选项,请将CategoryID属性更改为可空的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的列表。

sqxo8psd

sqxo8psd2#

你可以使用重载版本来显示“选择选项”初始化。

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

每当你在CategoryID下拉列表中添加选项时,你需要添加“选择选项”作为第一个选项,然后休息...

4smxwvx5

4smxwvx53#

我们需要显式地设置一个List对象,并像这样将其传递给Html.DropdownList()

@{
        List<SelectListItem> selectList = new List<SelectListItem>();
        selectList.Add(new SelectListItem
        {
            Text = "select option",
            Value = ""
        });
    }
    @Html.DropDownListFor(model => model.CategoryID, selectList, new { @class="form-control" })

相关问题