Проблема: мне нужно добавить гиперссылки к динамическому валидатору Сводка ошибок Описание описаний в динамическом приложении данных, 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_SСтраница ection02.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" });
}
Извините за всекод.
Дайте мне знать, если вам нужно что-нибудь еще.