Проверка ASP.NET FileUploader с помощью CustomValidator

У меня есть элемент управления FileUpload для загрузки файла сертификата. Пользователь должен загрузить файл в первый раз, при последующих посещениях страницы мы отображаем содержимое сертификата на странице, поэтому нет необходимости загружать файл повторно.

Теперь я хочу убедиться, что сертификат загружен хотя бы один раз. Остальная часть страницы использует элементы управления проверкой ASP.NET, поэтому я хочу продолжить работу с тем же.

Я не могу использовать RequiredFieldValidator в FileUpload, потому что тогда он будет срабатывать каждый раз, когда я пытаюсь сохранить страницу, что неверно.

Я попытался использовать CustomValidator и использовал проверку на стороне сервера, но, похоже, он тоже срабатывает, только если я нажимаю на загрузчик файлов. Если я просто оставлю это в покое, проверка на стороне сервера не будет запущена.

Я, конечно, могу выполнить проверку события нажатия кнопки [Сохранить], но есть ли правильный способ сделать это, используя сами события проверки?

CustomValidator:

 <asp:CustomValidator ID="cusCertifacteExistanceValidator" runat="server"                                                      ValidationGroup="ConfigValidation" CssClass="errorMsg" ControlToValidate="fcertificate" Enabled="false"                                                            ErrorMessage="Certificate is not available" OnServerValidate="ValidateCertificateUpload">*</asp:CustomValidator>

CustomValidator Проверка на стороне сервера:

protected void ValidateCertificateUpload(object source, ServerValidateEventArgs args)
    {
        args.IsValid = false;

        var existingCertificate = string.Empty;
        if (ViewState["loginProviderProperties"] != null)
        {
            existingCertificate = ((List<Configuration>)ViewState["properties"]).Find(p => p.Name == "certificate").Value;
        }

        if (fX509Certificate.HasFile || existingCertificate != string.Empty)
        {
            args.IsValid = true;
        }
    }

person devC    schedule 10.05.2018    source источник


Ответы (1)


Это очень сложно представить без кода, но я предполагаю добавить

ValidateEmptyText="true"

в пользовательский валидатор.

person Gagan Deep    schedule 10.05.2018
comment
К вашему сведению - даже это не сработало. Если я хотя бы не щелкну внутри загрузчика файлов, пользовательский валидатор не сработает. Мой последний вариант - выполнить явную проверку события нажатия кнопки сохранения на клиенте. - person devC; 11.05.2018