我已经使用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选项可用?
答案 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;作为第一个并在那之后休息......