如何将空值(默认情况下)设置为 MVC 4 中的下拉列表
How to set null value (by default) to drop-down list in MVC 4
在我的模型 class 中,我有一个枚举类型 属性 SubjectType
:
[Required(ErrorMessage = "This field is required.")]
public SubjectType SubjectType { get; set; }
我想为此 属性 创建下拉列表。但默认情况下,我希望将其设置为 null 以便用户必须选择一些内容,如果他尝试提交表单而不选择任何选项,则会显示验证消息。
实现此目标的最佳方法是什么?
我试图将 SubjectType
属性 更改为可为 null,并将默认值设置为 null,但此字段的验证仍然通过(不知何故)并且表单被提交到服务器。默认情况下,此字段的值设置为枚举定义中的第一个值。不允许 JavaScript,我想将所有内容保留在代码隐藏中。如有任何建议,我将不胜感激。
到目前为止我是这样渲染的:
@Html.DropDownList("SubjectType", EnumHelper.GetSelectList(typeof(SubjectType)))
@Html.LabelFor(model => model.SubjectType)
@Html.ValidationMessageFor(model => model.SubjectType)
编辑:我认为问题有三方面。首先,您的属性名为 SubjectType,但您的下拉列表名为 Type,因此它不能绑定到 SubjectType。
其次,显然你必须使用@HTML.dropdownlistfor()。我用我的两个不同版本的下拉列表和 dropdownlistfor 做了一个视图源,而 dropdownlistfor 是唯一添加验证的版本 类(见下文)
第三,我们需要添加选项标签参数"Select a Type"作为默认值。我相信它现在对你有用。
模型中:
[Required(ErrorMessage = "Error!")]
public string SubjectType{ get; set; }
在Html中:
@Html.DropDownListFor(m => m.SubjectType, new SelectList(Enum.GetNames(typeof(SubjectType))), "Select a Type", new { @class = "pretty" } )
现在我看到你有一个提供可枚举的助手我认为如果你用它替换我的第二个参数就可以了。
Dropdownlist 与 DropdownlistFor Select 元素的渲染:
下拉列表:
<select name="SubjectType" class="pretty" id="SubjectType">...</select>
DropdownListFor:
<select name="SubjectType" class="pretty" id="SubjectType" data-val-required="Error!" data-val="true">...</select>
如您所见,在执行简单的下拉菜单时缺少 data-val-required 和 data-val 类,因此不会为该属性打开验证。很抱歉来到这里的所有痛苦。有用的话别忘了给我点个赞哦
您可以通过以下方式解决问题:
将提交按钮更改为带有 onclick 操作的按钮,然后在 javascript 中对其进行验证,如果表单和此枚举字段有效,则使用 jQuery.
提交表单
在我的模型 class 中,我有一个枚举类型 属性 SubjectType
:
[Required(ErrorMessage = "This field is required.")]
public SubjectType SubjectType { get; set; }
我想为此 属性 创建下拉列表。但默认情况下,我希望将其设置为 null 以便用户必须选择一些内容,如果他尝试提交表单而不选择任何选项,则会显示验证消息。
实现此目标的最佳方法是什么?
我试图将 SubjectType
属性 更改为可为 null,并将默认值设置为 null,但此字段的验证仍然通过(不知何故)并且表单被提交到服务器。默认情况下,此字段的值设置为枚举定义中的第一个值。不允许 JavaScript,我想将所有内容保留在代码隐藏中。如有任何建议,我将不胜感激。
到目前为止我是这样渲染的:
@Html.DropDownList("SubjectType", EnumHelper.GetSelectList(typeof(SubjectType)))
@Html.LabelFor(model => model.SubjectType)
@Html.ValidationMessageFor(model => model.SubjectType)
编辑:我认为问题有三方面。首先,您的属性名为 SubjectType,但您的下拉列表名为 Type,因此它不能绑定到 SubjectType。
其次,显然你必须使用@HTML.dropdownlistfor()。我用我的两个不同版本的下拉列表和 dropdownlistfor 做了一个视图源,而 dropdownlistfor 是唯一添加验证的版本 类(见下文)
第三,我们需要添加选项标签参数"Select a Type"作为默认值。我相信它现在对你有用。
模型中:
[Required(ErrorMessage = "Error!")]
public string SubjectType{ get; set; }
在Html中:
@Html.DropDownListFor(m => m.SubjectType, new SelectList(Enum.GetNames(typeof(SubjectType))), "Select a Type", new { @class = "pretty" } )
现在我看到你有一个提供可枚举的助手我认为如果你用它替换我的第二个参数就可以了。
Dropdownlist 与 DropdownlistFor Select 元素的渲染:
下拉列表:
<select name="SubjectType" class="pretty" id="SubjectType">...</select>
DropdownListFor:
<select name="SubjectType" class="pretty" id="SubjectType" data-val-required="Error!" data-val="true">...</select>
如您所见,在执行简单的下拉菜单时缺少 data-val-required 和 data-val 类,因此不会为该属性打开验证。很抱歉来到这里的所有痛苦。有用的话别忘了给我点个赞哦
您可以通过以下方式解决问题: 将提交按钮更改为带有 onclick 操作的按钮,然后在 javascript 中对其进行验证,如果表单和此枚举字段有效,则使用 jQuery.
提交表单