【问题标题】:How to set null value (by default) to drop-down list in MVC 4如何在 MVC 4 中将空值(默认)设置为下拉列表
【发布时间】:2016-07-26 17:24:03
【问题描述】:

在我的视图模型类中,我有一个枚举类型属性SubjectType

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

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

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

我试图将SubjectType 属性更改为可空,并将默认值设置为null,但验证仍然通过此字段(不知何故)并且表单已提交到服务器。默认情况下,该字段的值设置为枚举定义中的第一个值。不允许使用 JavaScript,我想将所有内容都保存在代码隐藏中。如有任何建议,我将不胜感激。

到目前为止,我是这样渲染的:

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

【问题讨论】:

  • 如何渲染下拉菜单?您的查看代码?您如何传递项目(那些是什么)来构建下拉列表?
  • 编辑了帖子; EnumHelper 在 System.Web.Mvc 程序集中,在 System.Web.Mvc.Html 命名空间下
  • 正在使用 foreach 为 u 呈现列表?
  • 它不起作用。已发布空值且未触发验证。
  • 正如我提到的,我希望对此字段进行客户端验证

标签: c# asp.net-mvc enums html.dropdownlistfor


【解决方案1】:

您可以通过以下方式解决问题: 将提交按钮更改为具有 onclick 操作的按钮,然后在 javascript 中验证它,如果表单和此枚举字段有效,则使用 jQuery 提交表单。

【讨论】:

    【解决方案2】:

    编辑:我认为问题出在三个方面。首先,您的属性被命名为 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" } )
    

    现在我看到你有一个提供枚举的助手,我认为如果你用它替换我的第二个参数就可以了。

    Dropdownlist vs DropdownlistFor Select Element的渲染:

    下拉列表:

    <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 类,因此没有打开该属性的验证。很抱歉来到这里的所有痛苦。如果它有效,请不要忘记标记我。

    【讨论】:

    • 它没有引发验证消息,并且表单提交的 SubjectType 属性值作为枚举定义中的第一个值;它只显示设置为默认的附加选项“选择类型”
    • 我的必需属性可能有问题?是否应将其替换为“必需的非空字符串”之类的内容?不,这没有意义,podel 中的属性类型是枚举而不是字符串
    • 让我在这里检查一下
    • 您是否已加载所有脚本以进行不显眼的验证?
    • 我在浏览器中检查过,肯定包含
    猜你喜欢
    • 2016-11-16
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 2013-05-15
    • 2014-07-19
    • 2014-10-20
    • 1970-01-01
    • 2020-07-06
    相关资源
    最近更新 更多