У меня есть элемент управления 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;
}
}