1

問題: フィールド テンプレート (さまざまなフィールド タイプを定義)、エンティティ テンプレート (フィールドとテキストの移動先を定義)、フィルター (いつフィールドの表示が異なります)、ページ テンプレートを動的に生成して、Edit.aspx カスタム ページのアプリケーションとして完全なフォーム (選択した状態によって異なります) を生成します。

アプリケーションは非常に長いため、検証エラーが発生した質問をユーザーが簡単に見つけられるようにすることが重要です。

例: 次の検証エラーがスローされた場合:

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

エラーの原因となっているユーザーが指定したフィールドまたは回答にジャンプするハイパーリンクを追加します

私はオフかもしれませんが、検証が失敗したときに ControlToValidate プロパティで指定されたコントロールにフォーカスが設定されているかどうかを示す値を取得または設定するBaseValidator.SetFocusOnErrorプロパティを使用できると考えていました。

検証の概要にハイパーリンクを追加できない場合は、次のことを簡単に行うことができます。 - 各検証の説明にセクション # と質問 # を追加します。 - アプリケーション ページの上部にある 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 フィールド テンプレート ページでは、必須フィールド、Regular Express、Dynamic、および Custom Validators が定義されています。

  <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