我正在尝试实现一个可以接收各种文件数量的文件上传器。文件输入元素都命名相同,因此生成 MVC3 愉快地绑定(bind)到的文件列表。

所以在我的 Controller 中我有
public virtual ViewResult UploadReceive(IEnumerable<HttpPostedFileBase> Files ){
这将获得它应该得到的所有文件。然而,所有空的表单文件输入元素都添加了一个空值。这会阻止我在 Controller 中的基本非空列表验证按我的意愿工作。

验证如下:

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;
    }
}

知道如何将验证更改为一般只计算非空元素吗?

最佳答案

如果您只想计算非空对象,您可以使用带有 IList 的 LINQ:

list.Cast<object>().Count(o => o != null)

或者,您可以循环并计算每个非空对象。
int count = 0;
foreach (var item in list)
{
    if (item != null)
        count++;
}

关于asp.net - 如何使用 MVC 属性验证列表具有大于零的非空元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8429127/

10-10 13:49