1

ここでの私の質問へのフォローアップ: ASP.NET MVC 2 - 編集アクションでのファイルの処理; または、他の属性をスキップする「オプション」のデータ注釈を作成することは可能ですか?

検証属性が false としてトリガーされた場合 (たとえば、Requiredフィールドが欠落している)、他の検証属性も呼び出されますか、それともスキップされたり短絡されたりしますか?

ファイルが実際に存在する場合にのみ適用したいカスタムファイル検証属性があるため、質問します。RequiredSimon Ince の条件付き検証を使用して、エンティティを作成しているか編集しているかに基づいてフィールドを切り替えていますが、最初の結果に基づいて別の属性を実際に適用できるかどうかはわかりません。つまり、ファイルが存在しない場合、次のファイルバリデーターは例外をスローする可能性があります。

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 に答える