gpt4 book ai didi

.net MVC3 有条件地验证依赖于父对象属性的属性

转载 作者:行者123 更新时间:2023-12-04 06:11:59 24 4
gpt4 key购买 nike

我有以下 View 模型:

public class StayDetails
{
public int NumberOfRooms { get; set; }
public IList<RoomDetail> Rooms { get;set; }
}

public class RoomDetail
{
public int RoomNumber { get; set; }

[MinIfRoomRequired("StayDetails.NumberOfRooms", "RoomNumber", 1]
public int NumberOfAdults { get;set; }
}

我要做的是创建一个自定义验证器,它将验证房间中的成人人数并确保至少有 1 人,但前提是需要当前房间。这可以通过查看 StayDetails 对象的 NumberOfRooms 属性来了解。

到目前为止我的自定义验证器:
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
// get a reference to the depended properties
var containerType = validationContext.ObjectInstance.GetType();
var requiredRoomsField = containerType.GetProperty(RequiredRoomsPropertyName);
var roomNumberField = containerType.GetProperty(RoomNumberPropertyName);

if (requiredRoomsField != null && roomNumberField != null)
{
// get the value of the dependent properties
var requiredRoomsValue = requiredRoomsField.GetValue(validationContext.ObjectInstance, null);
var roomNumberValue = roomNumberField.GetValue(validationContext.ObjectInstance, null);

... (remaining logic to test values) ...

我遇到的问题是我无法访问 NumberOfRooms 属性,validationContext.ObjectInstance 没有对父对象的任何引用。我曾考虑在对象初始化期间向 RoomDetails 对象添加对 StayDetails 对象的引用,以便我可以从那里引用该属性,但模型绑定(bind)不允许这样做,因为 RoomDetail 对象没有无参数构造函数。

有什么建议么?

非常感谢,
大卫

最佳答案

您应该在 StayDetails class 上定义验证注释而不是 RoomDetail。这样,您将获得所有值、NumberOfRooms、房间列表及其各自的 RoomNumber 和 NumberOfAdults。相应地更改您的验证器。

关于.net MVC3 有条件地验证依赖于父对象属性的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7674841/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com