フォームを完了するために 4 つのパネルをステップ実行するウィザードと同じように効果的に使用するマルチビュー コントロールがあります。
各ビューには、多数の入力コントロール/バリデータ コントロールがあります。再利用するために、これらはユーザー コントロールとしてまとめられています。たとえば、私の電子メール ユーザー コントロールには、ラベル、テキスト ボックス、必要なバリデーター、および正規表現バリデーターを備えたパネルが含まれています。
マルチビューではすべてが読み込まれ、現在のビューの外側のコントロールが非表示になることはわかっていますが、これにより小さな問題が発生し、回避する方法として最善の提案を探しています。
これがシナリオです。
パネル 3 には、「Number」というユーザー コントロールが含まれています。ラベル、テキストボックス、およびカスタムバリデータを含むパネルがあります。
コントロールには設定可能なプロパティがあり (私は通常、それらを含む aspx ページで設定します)、コントロールはページの読み込み時に読み込まれます。
Aspx ページ:
<uc4:Number ID="UC_Number" runat="server"
Label="Monthly Take Home Pay"
MinValue="1"
MaxValue="9999" />
数値の Page_Load:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
SetValidation();
}
}
問題は SetValidation メソッドにあります。
void SetValidation()
{
CusVal_ValueLimits.ErrorMessage = GetErrorMessage();
if (MinValue > 0)
{
ScriptManager.RegisterExpandoAttribute(
this,
CusVal_ValueLimits.ClientID,
"MinValue",
MinValue.ToString(),
false);
}
if (MaxValue > 0)
{
ScriptManager.RegisterExpandoAttribute(
this,
CusVal_ValueLimits.ClientID,
"MaxValue",
MaxValue.ToString(),
false);
}
}
クライアントでカスタム検証を可能にするために、2 つの新しい expando 属性を追加します。これにより、属性が作成されてもユーザー コントロールがマルチビューによって非表示になるため、問題が発生します。
これは .net ajax コードでは適切に処理されず、参照されているユーザー コントロールが使用できないため、javascript エラーが発生します。
私が知る必要があるのは、ビューが表示されているときにこれらのユーザー コントロールを安全に読み込む方法、またはこれに対処するために expando 関連のコードを変更する方法です。
すべてのアイデアに感謝します。