将超链接添加到动态数据验证摘要以通过SetFocusOnError跳转到具有错误的字段

时间:2011-08-11 18:49:34

标签: c# validation dynamic-data validationsummary

问题:我需要在动态数据应用程序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" });
            } 

对所有代码感到抱歉。

如果您还有其他需要,请告诉我。

0 个答案:

没有答案