【问题标题】:Enum save failing, error message not displayed枚举保存失败,未显示错误消息
【发布时间】:2017-04-02 01:35:06
【问题描述】:

我是 MVC 的新手。我在成分表中为UnitOfMeasure 定义了一个枚举,如下所示:

public enum UnitOfMeasure
{
    oz=1,
    lb=2,
    ml=3,
    liter=4,
    gal=5
}

我已经定义了对应的字段如下:

[Required]
[Range(1, int.MaxValue, ErrorMessage = "Please make a selection")]
public UnitOfMeasure? UnitOfMeasure { get; set; }

根据需要,“请选择”在视图中显示为默认值,但我希望用户必须在保存之前进行选择。我在视图中使用EnumDropDownListFor,如下所示。

 @Html.EnumDropDownListFor(model => model.UnitOfMeasure,
                              "--Please select--", 
                              new { @class = "form-control" }) 

两个问题。首先,当用户没有进行选择时,错误消息不会出现,其次,我根本无法保存任何选择(显然没有选择符合范围标准)。我做错了什么?

【问题讨论】:

  • 删除[Range(1, int.MaxValue, ErrorMessage = "Please make a selection")] 属性。所需要的只是您的[Required] 属性(并在该属性中添加ErrorMessage。您是否包含@ValidationMessageFor(m => m.UnitOfMeasure) 以显示消息?
  • 解决了!谢谢斯蒂芬!

标签: c# asp.net-mvc razor enums data-annotations


【解决方案1】:

如果表单没有提交,但没有显示错误消息,则表示您没有包含该消息的占位符。您需要包括

@Html.ValidationMessageFor(m => m.UnitOfMeasure)

jquery.validate.unobtrusive.js 插件解析您的EnumDropDownListFor() 方法生成的html 中的data-val-* 属性,并将规则添加到jquery.validate.js,包括传递充当消息占位符的元素。在您的情况下,没有,因此无法显示任何内容,但是表单无效并且未提交。

请注意,您的[Range] 属性是不必要的,因为[Required] 属性已经意味着您必须选择enum 值之一。你可以简单地使用

[Required(ErrorMessage = "Please make a selection")]
public UnitOfMeasure? UnitOfMeasure { get; set; }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-15
    • 2017-10-05
    • 2013-04-28
    • 2019-11-01
    • 2012-11-26
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多