問題: フィールド テンプレート (さまざまなフィールド タイプを定義)、エンティティ テンプレート (フィールドとテキストの移動先を定義)、フィルター (いつフィールドの表示が異なります)、ページ テンプレートを動的に生成して、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" });
}
すべてのコードについて申し訳ありません。
他に何か必要な場合はお知らせください。