我使用带有MVC 2的.NET 4进行Annotations验证。是否有(简单)解决方案用于回复警告而不是错误?这样我就能得到一个绿色或黄色的方框,上面写着“你不应该使用这些内容,但你可以”。
非常感谢提前! :)
修改:
请注意我已经能够通过ErrorMessage
抛出错误,但我另外想要WarningMessage
或InfoMessage
这样的内容,以便用户只收到警告但可能会继续。有解决方案吗?
伪代码将是:
(请注意“伪”,因为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; }
}
并且是我希望在我的验证类中集中这个 - 而不是在.js文件中的某个地方。
答案 0 :(得分:2)
我会先快速评论一下,我不确定这是不是一个好主意!
“必需”属性具有某种“特征” - 当人们将其包含在属性中时,人们会期待它的某些特性。如果您想使用属性来定义此行为,请尝试更准确地描述您正在做的事情,而不是您的:
[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属性那样传播到客户端验证。
为了让它与MVC一起玩得很好,您需要将其创建为 Action 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,但我不认为你的新属性 IS 是RequiredAttribute是正确的,所以继承在概念上是不正确的。
答案 1 :(得分:1)
我不确定这是怎么回事。如果用户没有输入数据,并且数据被接受,那么您将继续访问其他页面,他们将永远不会看到警告消息。这意味着您要么必须不进展,要么向他们显示警告(然后要求他们做其他事情才能进展),否则您将不得不弹出一个对话框或警报,要求他们批准继续进行。
从可用性的角度来看,这两者都不是一个非常好的解决方案。
您如何建议用户实际看到警告?
答案 2 :(得分:0)
所有验证属性都具有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*/
答案 3 :(得分:0)
我认为没有必要在这里使用注释和验证数据。这里要做的最好的事情是编写一个JS函数,当用户提供一些输入失败的输入时,显示工具提示类型的消息,因为你总是允许它。数据注释的基本目的是不允许未定义条件的输入到达db。
答案 4 :(得分:0)
我不确定DataAnnotations在这方面会有所帮助。您始终可以使用自定义客户端验证。创建自定义类以将错误消息传递给客户端