C# 未对列表触发验证<&燃气轮机;控制器参数法
以下是一个片段:C# 未对列表触发验证<&燃气轮机;控制器参数法,c#,asp.net-mvc,validation,C#,Asp.net Mvc,Validation,以下是一个片段: 公共类OrderItemModel { 公共int ID{get;set;} 公共十进制数量{get;set;} } 公共类OrderMenuModel:List,IValidatableObject { 公共IEnumerable验证(ValidationContext ValidationContext) { 返回新的验证结果(“测试”); } } [HttpPost] 公共操作结果计算(OrderMenuModelMenuItems) { 如果(!TryValidateM
公共类OrderItemModel
{
公共int ID{get;set;}
公共十进制数量{get;set;}
}
公共类OrderMenuModel:List,IValidatableObject
{
公共IEnumerable验证(ValidationContext ValidationContext)
{
返回新的验证结果(“测试”);
}
}
[HttpPost]
公共操作结果计算(OrderMenuModelMenuItems)
{
如果(!TryValidateModel(menuItems))
返回新的HttpStatusCodeResult(HttpStatusCode.BadRequest);
//加工
}
Validate()
方法不是自动调用的,因此我必须调用TryValidateModel()
。由于这确实有帮助,我假设我的OrderMenuModel
没有问题。此外,当类的实例是包含对象的成员时,它也可以工作,如下所示:
public类OrderModel:IValidatableObject
{
public OrderMenuModel MenuItems{get;set;}
公共IEnumerable验证(ValidationContext ValidationContext)
{
//验证而不调用MenuItems.Validate(),因为它会被自动调用
}
}
[HttpPost]
公共行动结果地点(订单模型订单)
{
//无需调用TryValidateModel()
}
有人知道第一个场景会发生什么吗?谢谢。考虑到TryValidateModel是有效的,您是对的,这是不一致的行为。对象模型没有问题,因为只要根模型实现IEnumerable,就会出现这个问题。我正在调试框架源代码,并试图弄清楚为什么DefaultModelBinder中的验证在这里不起作用,但对TryValidateModel的显式调用起作用。这可能是一个合法的bug。希望很快回复你,但同时我删除了我以前的答案,以吸引其他可能有帮助的人。