C# 如何在MVC4中将空值(默认)设置为下拉列表
在视图的模型类中,我有一个枚举类型属性C# 如何在MVC4中将空值(默认)设置为下拉列表,c#,asp.net-mvc,enums,html.dropdownlistfor,C#,Asp.net Mvc,Enums,Html.dropdownlistfor,在视图的模型类中,我有一个枚举类型属性SubjectType: [Required(ErrorMessage = "This field is required.")] public SubjectType SubjectType { get; set; } 我想创建此属性的下拉列表。但默认情况下,我希望将其设置为null,以便用户必须选择某些内容,并且如果用户尝试提交表单而不选择任何选项,则将显示验证消息 实现这一目标的最佳方法是什么 我试图将SubjectType属性更改为nullable
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)
编辑:我认为问题有三个方面。首先,属性名为SubjectType,但下拉列表名为Type,因此不能绑定到SubjectType 其次,显然您必须使用@HTML.dropdownlistfor()。我用两个不同的版本dropdown和dropdownlistfor制作了一个viewsource,dropdownlistfor是唯一添加验证类的版本(见下文) 第三,我们需要添加选项标签参数“SelectaType”作为默认值。我相信它现在会对你有用的 在模型中:
[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 vs Dropdownlist用于渲染选定元素:
下拉列表:
<select name="SubjectType" class="pretty" id="SubjectType">...</select>
。。。
下拉列表用于:
<select name="SubjectType" class="pretty" id="SubjectType" data-val-required="Error!" data-val="true">...</select>
。。。
正如您所看到的,在进行简单的下拉时,data val required和data val类丢失,因此没有打开该属性的验证。很抱歉来到这里的痛苦。如果有效,请不要忘记将我标记为正确。这样做可以解决问题:
将submit按钮更改为带有onclick操作的按钮,然后在javascript中验证它,如果表单和此枚举字段有效,则使用jQuery提交表单。如何呈现下拉列表?您的查看代码?你是如何传递项目(哪些项目)来构建下拉列表的;EnumHelper位于System.Web.Mvc程序集中的System.Web.Mvc.Html名称空间下,正在使用foreach为u呈现列表?它不起作用。发布空vlaue并激发validaiton no。正如我提到的,我希望对此字段进行客户端验证,它不会引发验证消息,表单提交时,SubjectType属性值作为枚举定义中的第一个值;它只显示另一个选项“选择一种类型”,该选项设置为默认值可能是我所需的属性有问题?是否应该将其替换为“必需而非空字符串”?不,这没有意义,podel中的属性类型是enum not stringlet我来检查一下hereDo是否加载了所有脚本以进行不引人注目的验证?我在浏览器中进行了检查,肯定包括在内