如何使用 MVC 属性验证列表是否具有大于零的非空元素?

Gra*_*ler 5 asp.net validation asp.net-mvc-3

我正在尝试实现一个可以获取不同数量的文件的文件上传器。文件输入元素的名称都相同,因此会生成 MVC3 乐意绑定的文件列表。

所以在我的控制器中我有

public virtual ViewResult UploadReceive(IEnumerable<HttpPostedFileBase> Files ){

这会得到它应该得到的所有文件。然而,所有空表单文件输入元素都添加一个空值。这阻止了控制器中的基本非空列表验证按我想要的方式工作。

验证如下:

public class EnsureMinimumElementsAttribute : ValidationAttribute
{
    private readonly int _minElements;
    public EnsureMinimumElementsAttribute(int minElements)
    {
        _minElements = minElements;
    }

    public override bool IsValid(object value)
    {
        var list = value as IList;
        if (list != null)
        {
            return list.Count >= _minElements;
        }
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

知道如何更改验证以一般仅计算非空元素吗?

Joã*_*elo 3

如果您只想计算非空对象的数量,您可以使用 LINQ 并IList使用以下方法:

list.Cast<object>().Count(o => o != null)
Run Code Online (Sandbox Code Playgroud)

或者,您可以只循环并计算每个非空对象。

int count = 0;
foreach (var item in list)
{
    if (item != null)
        count++;
}
Run Code Online (Sandbox Code Playgroud)