【问题标题】:How do I validate list has greater than zero non null elements with MVC Attribute?如何使用 MVC 属性验证列表具有大于零的非空元素?
【发布时间】:2012-01-15 18:42:36
【问题描述】:

我正在尝试实现一个可以接收不同数量文件的文件上传器。输入元素的文件都命名相同,因此生成 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;
    }
}

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

【问题讨论】:

  • 您的意思是您的列表不为空但包含空元素?你可以做return list.Count(i => i != null)
  • 不起作用。我得到错误'System.Collections.IList'不包含'Count'的定义并且没有扩展方法'Count'接受'System.Collections.IList'类型的第一个参数
  • 你可能要参考System.Linq
  • 是的,这是我首先尝试的。引用了 Linq。我认为问题在于它是通用的。
  • 确实,扩展方法在 List 类中。好吧,您可以将类型更改为 List 并使用 linq 或循环并计算自己的非空元素。

标签: asp.net asp.net-mvc-3 validation


【解决方案1】:

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

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

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

int count = 0;
foreach (var item in list)
{
    if (item != null)
        count++;
}

【讨论】:

  • 我自己只是按照 Didiers cmets 和一些思考来做这件事。但是你先到了那里:)
猜你喜欢
  • 2019-10-07
  • 1970-01-01
  • 2010-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-16
  • 1970-01-01
  • 2023-03-30
相关资源
最近更新 更多