我在 ASP.NET MVC3 中创建了一个这样的继承属性:
public sealed class RequiredFromResourceAttribute : RequiredAttribute
{
public RequiredFromResourceAttribute(string errorResourceName, string errorResourceTypeName)
{
this.ErrorMessageResourceName = errorResourceName;
this.ErrorMessageResourceType = Type.GetType(errorResourceTypeName);
}
}
并像这样使用它:
[RequiredFromResource("Title", "Resources.Resource, MyProject.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")]
public string Title { get; set; }
它不起作用,MVC 忽略了它。然后我创建一个更简单的类,它只是从 RequiredAttribute 继承的,如下所示:
public class MyRequiredAttribute : RequiredAttribute
{
}
我就像我说的那样使用它。但它再次不起作用。
尽管如此,所有这些方式都可以完美地应用于“DisplayNameAtrribute”。
问题是什么?
最佳答案
它只是不适用于继承属性的客户端验证。原因是 MVC 在将服务器端属性映射到客户端验证行为时使用了严格的类型相等。
要解决此问题,您需要自定义属性来实现 IClientValidatable
:
public class MyRequiredAttribute : IClientValidatable {
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) {
yield return new ModelClientValidationRequiredRule();
}
}
关于asp.net-mvc - 从 ASP.NET MVC 3 中的必需属性继承时,客户端验证不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4749657/