在我的视图模型类中,我有一个枚举类型属性SubjectType
:
[Required(ErrorMessage = "This field is required.")]
public SubjectType SubjectType { get; set; }
我想为此属性创建下拉列表。但默认情况下,我希望将其设置为 null ,以便用户必须选择一些内容,如果他在不选择任何选项的情况下尝试提交表单,则会显示验证消息。
实现这一目标的最佳方法是什么?
我试图将SubjectType
属性更改为nullable,并将默认值设置为 null ,但验证仍然在此字段上传递(以某种方式)并且表单已提交给服务器。默认情况下,此字段的值设置为枚举定义中的第一个值。不允许使用JavaScript,我希望将所有内容保留在代码隐藏中。我会很感激任何建议。
到目前为止我用这种方式渲染:
@Html.DropDownList("SubjectType", EnumHelper.GetSelectList(typeof(SubjectType)))
@Html.LabelFor(model => model.SubjectType)
@Html.ValidationMessageFor(model => model.SubjectType)
答案 0 :(得分:1)
你可以解决这个问题: 使用onclick操作将提交按钮更改为按钮,然后在javascript中验证它,如果表单和此枚举字段有效,则使用jQuery提交表单。
答案 1 :(得分:0)
编辑:我认为这个问题有三个问题。首先,您的属性名为SubjectType,但您的下拉列表名为Type,因此无法绑定到SubjectType。
第二,显然你必须使用@ HTML.dropdownlistfor()。我用我的两个不同版本的dropdown和dropdownlistfor做了一个viewsource,dropdownlistfor是唯一一个添加验证类的(见下文)
第三,我们需要添加选项标签参数"选择类型"作为默认值。我相信它现在会为你工作。
在模特:
[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:
<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类,因此无法启用该属性的验证。对不起来到这里的所有痛苦。如果它有效,请不要忘记给我标记。