【问题标题】:Extending the MVC RequiredAttribute扩展 MVC 必需属性
【发布时间】:2012-09-16 09:42:34
【问题描述】:

我有一个不发回错误消息的RequiredAttribute 扩展类。如果我在调试器中检查它,文本就在那里。

public class VierRequired : RequiredAttribute
{
    public VierRequired(string controlName)
    {
        //...
    }

    public string VierErrorMessage
    {
        get { return ErrorMessage; }
        set { ErrorMessage = value; }
    }

    // validate true if there is any data at all in the object
    public override bool IsValid(object value)
    {
        if (value != null && !string.IsNullOrEmpty(value.ToString()))
            return true;

        return false; // base.IsValid(value);
    }
}

我这样称呼它

[VierRequired("FirstName", VierErrorMessage = "Please enter your first name")]
public string FirstName { get; set; }

还有 mvc 视图

<%: Html.TextBoxFor(model => model.FirstName, new { @class = "formField textBox" })%>
<%: Html.ValidationMessageFor(model => model.FirstName)%>

如果我使用普通的Required注解就可以了

[Required(ErrorMessage = "Please enter your name")]
public string FirstName { get; set; }

但是自定义没有发回任何错误信息

【问题讨论】:

  • 好吧,一方面,您的构造函数与您的类的名称不同。这只是一个转录错误吗?
  • “不发回错误信息”是什么意思?
  • @Benjamin 错误消息似乎没有返回到视图中。但是如果我使用普通的Required注释,他们会这样做。
  • 我很怀疑value.ToString() 确实在做你认为的事情。你需要value as String。

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


【解决方案1】:

当我创建自己的RequiredAttribute 衍生产品时,我也遇到了客户端验证问题。要修复它,您需要像这样注册数据注释:

DataAnnotationsModelValidatorProvider.RegisterAdapter(
            typeof(VierRequired),
            typeof(RequiredAttributeAdapter));

只需在您的 Application_Start() 方法中调用它,客户端验证就会正常工作。

如果您在发布表单时属性不起作用,那么这将向我表明您的属性中的逻辑有问题(检查您的IsValid 方法)。 我也不确定你想用你的派生数据注释来实现什么;你的逻辑看起来就像是在尝试做几乎默认属性所做的事情:

取自 MSDN 文档:

如果属性为 null、包含空字符串 ("") 或仅包含空白字符,则会引发验证异常。

【讨论】:

  • 这只是客户端验证所必需的。
  • 事实证明这是正确的,我的设置有点复杂,因为我在另一个项目中运行 mvc 项目。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
相关资源
最近更新 更多