Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation ASP.NET MVC 2/3验证属性-如果其中一个触发为false,其他是否短路?_Validation_C# 4.0_Asp.net Mvc 2_Data Annotations_File Handling - Fatal编程技术网

Validation ASP.NET MVC 2/3验证属性-如果其中一个触发为false,其他是否短路?

Validation ASP.NET MVC 2/3验证属性-如果其中一个触发为false,其他是否短路?,validation,c#-4.0,asp.net-mvc-2,data-annotations,file-handling,Validation,C# 4.0,Asp.net Mvc 2,Data Annotations,File Handling,我的问题的后续行动如下: 如果验证属性触发为false(例如,缺少必需的字段),是否还会调用其他验证属性,或者跳过/短路其他验证属性 我之所以这样做是因为我有一个自定义的文件验证属性,我只想在文件实际存在时应用它。我正在使用Simon Ince的条件验证,根据我是否正在创建或编辑实体来切换Required字段,但我不确定是否可以根据第一个属性的结果实际应用另一个属性。我的意思是,如果文件不存在,以下文件验证程序可能会抛出异常: public class ValidateFileAttribute

我的问题的后续行动如下:

如果验证属性触发为false(例如,缺少
必需的
字段),是否还会调用其他验证属性,或者跳过/短路其他验证属性

我之所以这样做是因为我有一个自定义的文件验证属性,我只想在文件实际存在时应用它。我正在使用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;
        }
    }
}

我不知道如何处理这个问题。文件可能在那里,也可能不在那里,但如果它们在那里,我想验证它们。有什么想法吗?

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

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