0

フォームを完了するために 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 関連のコードを変更する方法です。

すべてのアイデアに感謝します。

4

1 に答える 1

0

これを解決するには、レンダリング前の if(this.Visible) 中にユーザー コントロールが表示されているかどうかを確認し、表示されている場合は expando を呼び出しました。

于 2012-12-02T18:57:40.183 に答える