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