如果 属性 使用注释属性,为什么 setter 必须为空?
Why must a setter be empty, if the property uses annotation attributes?
我想使用 setter 来自动更正值,并且也想使用 RequiredAttribute。但在这种情况下 RequiredAttribute 不起作用,因为 setter 不为空。
那么,为什么 setter 为空?
[Required(AllowEmptyStrings = false, ErrorMessage = "The Name cannot be empty. Please correct.")]
public String Name //{get; set;} <- Required works fine...
{
get { return _name; }
set // <- Required did not work...
{
String setValue = Regex.Replace(value, @"^\d+", "");
setValue = Regex.Replace(setValue, @"[^a-zA-Z0-9_]+", "_");
_name = setValue;
}
}
你的假设实际上是不正确的。您可以使用具有所需属性的自定义 setter。
void Main()
{
var test = new Test();
Validator.ValidateObject(test, new ValidationContext(test));
}
public class Test
{
private string _name;
[Required(AllowEmptyStrings = false, ErrorMessage = "The Name cannot be empty. Please correct.")]
public String Name
{
get { return _name; }
set
{
String setValue = Regex.Replace(value, @"^\d+", "");
setValue = Regex.Replace(setValue, @"[^a-zA-Z0-9_]+", "_");
_name = setValue;
}
}
}
这个快速而肮脏的测试会抛出您需要的验证消息。
我想使用 setter 来自动更正值,并且也想使用 RequiredAttribute。但在这种情况下 RequiredAttribute 不起作用,因为 setter 不为空。 那么,为什么 setter 为空?
[Required(AllowEmptyStrings = false, ErrorMessage = "The Name cannot be empty. Please correct.")]
public String Name //{get; set;} <- Required works fine...
{
get { return _name; }
set // <- Required did not work...
{
String setValue = Regex.Replace(value, @"^\d+", "");
setValue = Regex.Replace(setValue, @"[^a-zA-Z0-9_]+", "_");
_name = setValue;
}
}
你的假设实际上是不正确的。您可以使用具有所需属性的自定义 setter。
void Main()
{
var test = new Test();
Validator.ValidateObject(test, new ValidationContext(test));
}
public class Test
{
private string _name;
[Required(AllowEmptyStrings = false, ErrorMessage = "The Name cannot be empty. Please correct.")]
public String Name
{
get { return _name; }
set
{
String setValue = Regex.Replace(value, @"^\d+", "");
setValue = Regex.Replace(setValue, @"[^a-zA-Z0-9_]+", "_");
_name = setValue;
}
}
}
这个快速而肮脏的测试会抛出您需要的验证消息。