.NET 4 MVC 2使用注释警告而不是错误进行validation

我使用.NET 4和MVC 2来validationAnnotations。 是否有一个(简单的)解决方案来回复警告而不是错误 ? 这样我就能得到一个绿色或黄色的方框,上面写着“你不应该使用这些内容,但你可以”。

非常感谢提前! 🙂

编辑:
请注意我已经能够通过ErrorMessage丢弃错误但我想要一些像WarningMessageInfoMessage这样的东西,以便用户只收到警告但可能会继续。 这有解决方案吗?

Pseudocode将是:( 请注意“伪”,因为WarningMessage (不幸的是)不是有效的类)

 public class Person { [StringLength(50)] [Required(ErrorMessage = "You MUST enter a name!")] public string Name { get; set; } [Required(WarningMessage = "It is recommended to fill out the age but you may leave it out)] public int Age { get; set; } } 

是的,我想在我的validation类中集中这个 – 而不是在.js文件中的某个地方。

我会先快速评论一下,我不确定这是不是一个好主意!

“必需”属性具有一定的“特征” – 当人们将其包含在属性中时,人们会期待它的某些特征。 如果您想使用属性来定义此行为,请尝试更准确地描述您正在做的事情,而不是您的:

 [Required(WarningMessage = "It is recommended to fill out age...")] public int Age { get; set; } 

我有:

 [PreSubmitWarningMessage("It is recommended to fill out age...")] public int Age { get; set; } 

您可以创建自己的属性,这些属性将影响请求的处理方式,但这不会像标准MVC属性那样传播到客户端validation。

为了使其与MVC一起使用,您需要将其创建为动作filter – 特别是通过实现ActionFilterAttribute并重写OnActionExecuted方法:

 public class PreSubmitWarningMessage : ActionFilterAttribute { private string _warningMessage; public PreSubmitWarningMessage(string warningMessage) { _warningMessage = warningMessage; } public override void OnActionExecuting(ActionExecutingContext filterContext) { // stuff you do here will happen before the // controller action is executed. // you can compare the private warning message // to the metadata in filterContext } } 

你可以在这里做几件事,我不确定最佳实践是什么,但是在最恶劣的情况下,你可以访问filterContext中的模型,这样你就可以改变你的控制器动作的行为,更新你的视图模型如果你的警告条件(在这种情况下,需要该字段),到某个状态。

人们可能只是为了扩展RequiredAttribute,但我认为你的新属性 RequiredAttribute是不正确的,所以inheritance在概念上是不正确的。

我不确定这怎么会起作用。 如果用户没有输入数据,并且数据被接受,那么您将继续访问其他页面,他们将永远不会看到警告消息。 这意味着您要么必须不进展,要么向他们显示警告(然后要求他们做其他事情才能进展),否则您将不得不弹出一个对话框或警报,要求他们批准继续进行。

从可用性的角度来看,这两者都不是一个很好的解决方案。

你如何建议用户实际看到警告?

我不确定DataAnnotations在这方面会有所帮助。 您始终可以使用自定义客户端validation。 创建自定义类以将错误消息传递给客户端

我认为没有必要在这里使用注释和validation数据。 这里要做的最好的事情是编写一个JS函数,当用户提供一些输入失败的输入时,显示工具提示类型的消息,因为你总是允许它。 数据注释的基本目的是不允许未定义条件的输入到达db。

所有validation属性都具有ErrorMessage属性。 您可以提供自定义错误消息

 public class Product { [StringLength(50)] [Required(ErrorMessage = "Your user friendly message")] public string Name { get; set; } } 

然后更改错误消息的CSS样式。

 /* Styles for validation helpers -----------------------------------------------------------*/ .field-validation-error { color: #ff0000;/*change the color*/ } /*Other validation related styles*/