我有一個自定義驗證屬性,我需要傳遞一些屬性。但是,應用該屬性本身時出現了我的問題。我正在向後學習,所以我傾向於陷入「更簡單」的問題。我已經嘗試過讓這個屬性變成靜態的,但是這使我的觀點變得混亂。我該如何解決這個問題?
屬性:「對象引用是必需的非靜態字段,方法或屬性'RxCard.dataobjects.Pharmacy.Area.Get'」
public class MinimumPhoneDigits : ValidationAttribute
{
public string[] _properties;
public int _expectedsize;
public MinimumPhoneDigits(int expectedsize, params string[] properties)
{
ErrorMessage = "Not the expected size!";
_properties = properties;
_expectedsize = expectedsize;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (_properties == null || _properties.Length < 1)
{
return new ValidationResult("WOAH! Not the right size.");
}
int totalsize = 0;
foreach (var property in _properties)
{
var propinfo = validationContext.ObjectType.GetProperty(property);
if (propinfo == null)
return new ValidationResult(string.Format("could not find {property}"));
var propvalue = propinfo.GetValue(validationContext.ObjectInstance, null) as string;
if (propvalue == null)
return new ValidationResult(string.Format("wrong property for {property}"));
totalsize += propvalue.Length;
}
if (totalsize != _expectedsize)
return new ValidationResult(ErrorMessage);
return ValidationResult.Success;
}
}
類:
public class Pharmacy
{
[MinimumPhoneDigits(10, Area)]
public string PhoneNumber
{
get
{
return _phoneNumber;
}
set
{
_phoneNumber = value;
}
}
private string _phoneNumber;
public string Area
{
get
{
try
{
return _phoneNumber.Split(new char[] { '(', ')', '-' }, StringSplitOptions.RemoveEmptyEntries)[0].Trim();
}
catch
{
return "";
}
}
}
}
哪裏是你的自定義屬性實際上定義的值? –
你需要告訴我們你在哪裏獲得'Pharmacy.Area',但是,一般來說,'catch {return「」; }'是問題集的成員,而不是解決方案集的成員。 –
你的代碼吞噬拋出的任何異常,順便說一句。 – Tim