Я работаю над веб-приложением asp.net mvc 2.У меня есть модель с 3 свойствами:
[IsCityInCountry("CountryID", "CityID"]
public class UserInfo
{
[Required]
public int UserID { get; set; }
[Required]
public int CountryID { get; set; }
[Required]
public int CityID { get; set; }
}
У меня есть один атрибут обязательного свойства и один атрибут на уровне класса:
using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
public class IsCityInCountry : ValidationAttribute
{
public IsCityInCountry(string countryIDProperty, string cityIDProperty)
{
CountryIDProperty = countryIDProperty;
CityIDProperty = cityIDProperty;
}
public string CountryIDProperty { get; set; }
public string CityIDProperty { get; set; }
public override bool IsValid(object value)
{
var properties = TypeDescriptor.GetProperties(value);
var countryID = properties.Find(CountryIDProperty, true).GetValue(value);
var cityID = properties.Find(CityIDProperty , true).GetValue(value);
int countryIDInt;
int.TryParse(countryID.ToString(), out countryIDInt);
int cityIDInt;
int.TryParse(cityID.ToString(), out cityIDInt);
if (CountryBusiness.IsCityInCountry(countryIDInt, cityIDInt))
{
return true;
}
return false;
}
}
Когда я публикую форму в своем представлении,и CountryID не введен, в словаре ModelState есть ошибка об этой проблеме.Другой атрибут игнорируется ("IsCityInCountry").Когда я выбираю CountryID и CityID, которых нет в выбранной стране, я получаю соответствующее подтверждающее сообщение об этом, и ModelState имеет другой ключ (который "").Я понимаю, что преимущество имеет атрибуты свойств, а затем атрибуты класса.Мой вопрос;Есть ли способ получить все сообщения проверки одновременно, независимо от того, какие атрибуты задействованы (атрибуты класса или свойства)?Заранее спасибо.