2016-07-26 34 views
1

在查看我的模型类,我有一个枚举类型属性SubjectType如何设置空值(默认)到下拉列表中的MVC 4

[Required(ErrorMessage = "This field is required.")] 
public SubjectType SubjectType { get; set; } 

我想创建下拉此属性的列表。但默认情况下,我希望将其设置为null,以便用户必须选择某些内容,并且如果他不尝试提交表单而不选择任何选项,则会显示验证消息。

实现此目标的最佳方法是什么?

我试图改变SubjectType属性为空的,并且默认值设置为,但仍审定通过了这一领域(在某种程度上)和形式提交给服务器。默认情况下,此字段的值设置为枚举定义中的第一个值。没有JavaScript允许,我想保留所有代码隐藏。我会很感激任何建议。

到目前为止,我呈现这样说:

@Html.DropDownList("SubjectType", EnumHelper.GetSelectList(typeof(SubjectType))) 
@Html.LabelFor(model => model.SubjectType) 
@Html.ValidationMessageFor(model => model.SubjectType) 
+0

你是如何渲染下拉?您的查看代码?你如何通过项目(那些)来建立下拉? – Shyju

+0

编辑帖子; EnumHelper位于System.Web.Mvc的System.Web.Mvc程序集中。Html命名空间 – Koteczeg

+0

正在使用foreach来显示列表中的一个选项吗? – Steve

回答

1

你能解决这样做的问题: 用onclick动作将提交按钮更改为按钮,然后在javascript中验证它,如果form和此枚举字段有效,则使用jQuery提交表单。

+0

谢谢亲爱的先生 – Koteczeg

0

编辑:我觉得这个问题是三折。首先你的属性被命名为SubjectType,但你的下拉列表被命名为Type,所以它不能绑定到SubjectType。

秒,显然你必须使用@ HTML.dropdownlistfor()。我做了一个与我的两个不同版本dropdown和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" }) 

现在我看到你有配料中的枚举我认为,如果你与替换我的第二个PARAM这会就好了一个帮手。

DROPDOWNLIST VS选择元素的DropdownlistFor渲染:

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> 

正如你所看到的数据-VAL-要求和数据-VAL类失踪当做一个简单的下拉菜单时,不会打开对该属性的验证。对不起,到这里来的所有痛苦。不要忘记标记我的权利,如果它的工作。

+0

它不会引发验证消息,并将表单子集与SubjectType属性值作为枚举定义中的第一个值;它只显示附加选项“选择一种类型”,它被设置为默认 – Koteczeg

+0

,可能是我的必需属性有问题?应该用“不需要空字符串”之类的东西替换它吗? nah它没有任何意义,podel中的属性类型是枚举而不是字符串 – Koteczeg

+0

让我检查这里的东西 –

相关问题