为语句

时间:2015-06-22 14:43:03

标签: c# asp.net-mvc

我有一个带嵌套集合的模型:

public class SomeClass
{
    public SomeClass()
    {
        this.OtherPart = new HashSet<OtherPart>();
    }

    [Key]
    public int SomeClassId { get; set; }
    public string SomeData { get; set; }
    public string SomeOtherData { get; set; }

    public virtual ICollection<OtherPart> OtherParts { get; set; }

    public void CreateOthers(int count = 1)
    {
        for (int i = 0; i < count; i++)
        {
            OtherParts.Add(new OtherPart());
        }
    }
}

使用此Controller操作:

public ActionResult Create()
{
    var abc = new SomeClass();
    abc.CreateOthers();

    return View(abc);
}

它完美无缺。我现在遇到的问题是,对于我的用例,我需要设置要创建的最大项目数(在本例中为5)。

我在上面的空白中尝试了以下修改,但它被忽略了:

public void CreateOthers(int count = 1, int max = 5)
{
    for (int i = 0; i < count && count < max; i++)
    {
        OtherParts.Add(new OtherPart());
    }
}

有关如何有效限制添加到嵌套集合的最大项目数的任何建议?

谢谢!

2 个答案:

答案 0 :(得分:2)

您可能需要一个自定义验证器,类似于:

validator

在您的型号代码中,只需执行以下操作:

public class MaxItemsAttribute : ValidationAttribute
{
    private readonly int _max;

    public MaxItemsAttribute(int max) {
        _max = max;
    }

    public override bool IsValid(object value) {
        var list = value as IList;
        if (list == null)
            return false;

        if (list.Count > _max)
            return false;

        return true;
    }
}

答案 1 :(得分:0)

更改为i&lt;最大

   public void CreateOthers(int count = 1, int max = 5)
                {
                    for (int i = 0; i < count && i < max; i++)
                    {
                        OtherParts.Add(new OtherPart());
                    }