Добавьте гиперссылки в сводку динамической проверки данных, чтобы перейти к полю с ошибкой через SetFocusOnError
Проблема: мне нужно добавить гиперссылки к динамической проверке валидатора. Описание ошибок в динамическом приложении данных, eApp, которое использует шаблоны полей (определяет различные типы полей), шаблоны сущностей (определяет, куда идут поля и текст), фильтры (определяет, когда поля отображаются по-разному) и шаблоны страниц для динамического создания полной формы (в зависимости от выбранного состояния) в качестве приложения на пользовательской странице Edit.aspx.
Поскольку приложение очень длинное, важно, чтобы пользователь мог легко найти вопрос, по которому возникла ошибка проверки.
Пример: если выдается следующая ошибка проверки:
Requested Effective Date is required for Medicare Supplement Coverage (Applicant A).
Добавьте гиперссылку, которая переходит на поле или ответ, данный пользователем, который вызывает ошибку
Возможно, я выключен, но я подумал, что мог бы каким-то образом использовать свойство BaseValidator.SetFocusOnError, которое получает или устанавливает значение, указывающее, установлен ли фокус на элемент управления, заданный свойством ControlToValidate, при сбое проверки.
Если добавление гиперссылок к сводке проверки невозможно, я мог бы упростить: - Добавить раздел № и вопрос № к каждому описанию проверки - Предоставить ссылки для перехода к каждому из 7 разделов в верхней части страницы приложения.
Код ASP.NET на пользовательской странице Edit.aspx, который сообщает браузеру, куда и куда направляются динамические данные:
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:ValidationSummary ID="ValidationSummary1" runat="server" EnableClientScript="true"
HeaderText="The following errors occured:" CssClass="DDValidator" />
<company:DynamicValidator runat="server" ID="DetailsViewValidator" ControlToValidate="FormView1" Display="None" CssClass="DDValidator" />
<asp:FormView runat="server" ID="FormView1" DataSourceID="DetailsDataSource" OnItemDeleted="FormView1_ItemDeleted" RenderOuterTable="false">
<ItemTemplate>
<table id="detailsTable" class="DDDetailsTable" cellpadding="6">
<asp:DynamicEntity runat="server" />
Под EntityTemplate страница MedSupLife_Section02.ascx определяет, где находятся динамические элементы управления, но не перечисляет ошибки проверки:
1. Are you covered under Medicare Part A?
<br/>If "YES", what is your Part A effective date?
<asp:DynamicControl runat="server" DataField="MedPartAEffDate_A" OnInit="DynamicControl_Init" /> /
<asp:DynamicControl runat="server" DataField="MedPartAEffDate_B" OnInit="DynamicControl_Init" />
<br/>If "NO", what is your eligibility date?
<asp:DynamicControl runat="server" DataField="MedPartAEligDate_A" OnInit="DynamicControl_Init" /> /
<asp:DynamicControl runat="server" DataField="MedPartAEligDate_B" OnInit="DynamicControl_Init" />
Под страницей DynamicValidator.cs выложен прогресс проверки.
На странице шаблона поля DateTime_Edit.ascx определены обязательные поля, регулярные экспресс, динамические и пользовательские валидаторы:
<asp:RequiredFieldValidator runat="server" ID="RequiredFieldValidator1" CssClass="DDControl DDValidator" ControlToValidate="TextBox1" Display="Static" Enabled="false" />
<asp:RegularExpressionValidator runat="server" ID="RegularExpressionValidator1" CssClass="DDControl DDValidator" ControlToValidate="TextBox1" Display="Static" Enabled="false" />
<asp:DynamicValidator runat="server" ID="DynamicValidator1" CssClass="DDControl DDValidator" ControlToValidate="TextBox1" Display="Static" />
<asp:CustomValidator runat="server" ID="DateValidator" CssClass="DDControl DDValidator" ControlToValidate="TextBox1" Display="Static" EnableClientScript="false" Enabled="false" OnServerValidate="DateValidator_ServerValidate" />
В MedLifeApplication.cs определены валидаторы:
public IEnumerable<ValidationResult> ValidateApplicant(ValidationContext validationContext, Applicant a)
{
if (ForMedCoverage)
{
if (!a.RequestedEffectiveDate.HasValue)
{
yield return new ValidationResult("Requested Effective Date is required for Medicare Supplement Coverage (Applicant " + a.Code + ").", new[] { "RequestedEffectiveDate_" + a.Code, "ForMedCoverage" });
}
Извините за весь код.
Позвольте мне знать, если вам нужно что-нибудь еще.