1

我的问题的后续行动:ASP.NET MVC 2 - 在编辑操作中处理文件;或者,是否可以创建一个“可选”数据注释来跳过其他属性?

如果验证属性触发为假(例如,Required缺少字段),是否还会调用其他验证属性,或者它们是否会被跳过/短路?

我问是因为我有一个自定义文件验证属性,我只想在文件实际存在时应用。我正在使用 Simon Ince 的条件验证来Required根据我是否正在创建或编辑实体来切换字段,但我不确定是否可以根据第一个结果实际应用另一个属性。我的意思是,如果文件不存在,以下文件验证器可能会抛出异常:

public class ValidateFileAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        var file = value as HttpPostedFileBase;

        if (file == null)
        {
            return false;
        }

        string[] validExtensions = { "jpg", "jpeg", "gif", "png" };
        string[] validMimeTypes = { "image/jpeg", "image/pjepeg", "image/gif", "image/png" };

        string[] potentialFileExtensions = file.FileName.Split('.');
        string lastExtension = potentialFileExtensions[(potentialFileExtensions.Length - 1)];
        string mimeType = file.ContentType;

        bool extensionFlag = false;
        bool mimeFlag = false;

        foreach (string extension in validExtensions)
        {
            if (extension == lastExtension)
            {
                extensionFlag = true;
            }
        }

        foreach (string mt in validMimeTypes)
        {
            if (mt == mimeType)
            {
                mimeFlag = true;
            }
        }

        if (extensionFlag && mimeFlag)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

我不知道如何解决这个问题。这些文件可能存在也可能不存在,但如果存在,我想验证它们。有任何想法吗?

4

1 回答 1

1

除非您打算从自定义属性中重复使用,否则尝试将逻辑放入自定义属性中可能会使事情复杂化。您可以在控制器操作中(或在它调用的单独库中运行您的逻辑吗?)这样您就不必处理尝试链接属性的问题。

于 2012-06-07T03:56:11.090 回答