Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 未对列表触发验证<&燃气轮机;控制器参数法_C#_Asp.net Mvc_Validation - Fatal编程技术网

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。希望很快回复你,但同时我删除了我以前的答案,以吸引其他可能有帮助的人。