Добавьте гиперссылки в сводку динамической проверки данных, чтобы перейти к полю с ошибкой через SetFocusOnError - PullRequest
1 голос
/ 11 августа 2011

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

Извините за всекод.

Дайте мне знать, если вам нужно что-нибудь еще.

...