我有一个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 View
<%: 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; }

但是自定义不会发送回任何错误消息

最佳答案

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

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

只需在Application_Start()方法中调用此方法,客户端验证就可以正常进行。

如果在发布表单时属性不起作用,则这将向我表明属性逻辑有问题(请检查IsValid方法)。
我也不确定您要使用派生数据注释实现什么?您的逻辑看起来似乎正在尝试执行默认属性的所有操作:

取自MSDN文档:

关于c# - 扩展MVC RequiredAttribute,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12573362/

10-13 04:58