Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在MVC4中将空值(默认)设置为下拉列表_C#_Asp.net Mvc_Enums_Html.dropdownlistfor - Fatal编程技术网

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是否加载了所有脚本以进行不引人注目的验证?我在浏览器中进行了检查,肯定包括在内