1

问题:我需要在动态数据应用程序 eApp 中添加超链接到动态验证器验证摘要错误描述,该应用程序使用字段模板(定义不同的字段类型)、实体模板(定义字段和文本的位置)、过滤器(定义何时字段显示不同)和页面模板动态生成完整的表单(根据所选状态不同)作为 Edit.aspx 自定义页面上的应用程序。

由于应用程序很长,因此让用户轻松找到验证错误发生在哪个问题上很重要。

示例:如果抛出以下验证错误:

   Requested Effective Date is required for Medicare Supplement Coverage (Applicant A).

添加跳转到导致错误的用户给出的字段或答案的超链接

我可能不在,但我想我可以以某种方式使用BaseValidator.SetFocusOnError属性,它获取或设置一个值,该值指示当验证失败时是否将焦点设置为由 ControlToValidate 属性指定的控件。

如果无法将超链接添加到验证摘要,我可以更轻松地: - 在每个验证描述中添加第 # 部分和问题 # - 提供链接以跳转到应用程序页面顶部的 7 个部分中的每个部分

Edit.aspx 自定义页面上的 ASP.NET 代码告诉浏览器动态数据在哪里:

<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" });
            } 

对不起所有的代码。

需要帮助请叫我。

4

0 回答 0