Вы можете создать пользовательский атрибут, который выполняет динамическое форматирование за вас.Вы бы просто пометили свои поля адреса атрибутом Address следующим образом:
[Address]
public string AddressLine1 { get; set; }
Вам необходимо добавить свойство в AddressBaseModel, где вы сообщаете системе, какой это тип адреса (вы должны установить его на«Выставление счетов» или «Доставка», когда вы создаете экземпляр модели представления непосредственно перед передачей модели представления в представление в действии контроллера get):
public string AddressType { get; set; }
Пользовательский атрибут, подобный этому, должен работать (у меня нетЯ проверил это, я написал это только сейчас).Это автоматически возвращает тип адреса, который вы указали при создании экземпляра модели, и форматирует его с отображаемым именем поля адреса.)
public class AddressAttribute : ValidationAttribute
{
private const string DefaultErrorMessage = "{0} - {1} required";
public AddressAttribute()
: base(DefaultErrorMessage) { }
protected override ValidationResult IsValid(object value,
ValidationContext validationContext)
{
if (value != null)
{
if (!base.IsValid(value))
{
// get the property called "AddressType" from the model so we know if it's Billing or Shipping
var addressType = validationContext.ObjectInstance.GetType()
.GetProperty("AddressType")
.GetValue(validationContext.ObjectInstance, null);
// use the display name of the address field in the error message
return new ValidationResult(
string.Format(DefaultErrorMessage, addressType, validationContext.DisplayName));
}
}
return ValidationResult.Success;
}
}