我目前正在使用Umbraco内的MVC建立预订表格。我关心的属性如下:
public class SomeClass {
private static final Logger LOG = LoggerFactory.getLogger("DB");
}
UmbracoDisplayName注释只是从Umbraco中的字典中检索一个值,该值会更改每个项目旁边显示的标签的值。理想情况下,我想创建一个自定义数据注释,以确保上面显示的至少一个属性(Phone_mobile,Phone_Home,Phone_Work)具有值。
目前我在控制器中执行以下操作:
public class BookingModel{
public bool Previous { get; set; }
public bool Next { get; set; }
public int Stage { get; set; }
public int Price { get; set; }
public Tour_Instance Tour_Instance { get; set; }
public Passenger_Count Passenger_Count {get; set;}
public Passenger_Details Passenger_Details { get; set; }
public BookingConfirmation Booking_Confirmation { get; set; }
}
public class Passenger_Details{
[UmbracoDisplayName("Booking.Display.PhoneMobile")]
public string Phone_Mobile { get; set; }
[UmbracoDisplayName("Booking.Display.PhoneHome")]
public string Phone_Home { get; set; }
[UmbracoDisplayName("Booking.Display.PhoneWork")]
public string Phone_Work { get; set; }
}
这完成了工作,但并不适合惯例。我的问题是,如何创建数据注释,以便它运行具有注释的模型的所有属性的比较,并检查值是null还是空?
我知道如何创建一个自定义注释,它基本上只是我必须遵循的逻辑,我正在努力想出来。
非常感谢任何协助。
答案 0 :(得分:2)
要完成此任务,您可以创建一个继承自ValidationAttribute的类,并实现类似于:
的类public class OnePhoneRequiredAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var passengerDetails = value as Passenger_Details;
if (passengerDetails == null)
{
// handle depending on your situation
}
if (string.IsNullOrWhiteSpace(passengerDetails.Phone_Mobile)
&& string.IsNullOrWhiteSpace(passengerDetails.Phone_Home)
&& string.IsNullOrWhiteSpace(passengerDetails.Phone_Work))
{
return new ValidationResult(Umbraco.GetDictionaryValue("Booking.Validation.OnePhoneRequired"));
}
return null;
}
}
然后将此属性添加到您的模型中:
[OnePhoneRequired]
public Tour_Instance Tour_Instance { get; set; }
编辑:另外看看FluentValidation库,它可以简化你的验证逻辑。