.net 多视图控件和expando属性存在问题

.net 多视图控件和expando属性存在问题,.net,ajax,customvalidator,multiview,expando,.net,Ajax,Customvalidator,Multiview,Expando,我有一个多视图控件,我有效地使用它,就像向导通过4个面板来完成表单一样 每个视图都有许多输入控件/验证程序控件。为了重用,这些控件作为用户控件捆绑在一起。例如,我的电子邮件用户控件包含一个面板,带有标签、文本框、必需的验证器和正则表达式验证器 我知道多视图加载了所有内容,然后隐藏了当前视图之外的控件,但是这给我带来了一个小问题,我正在寻找最佳的解决方法 下面是一个场景 面板3包含一个名为“Number”的用户控件。它有一个面板,包含标签、文本框和自定义验证器 该控件具有可以设置的属性(我通常在包

我有一个多视图控件,我有效地使用它,就像向导通过4个面板来完成表单一样

每个视图都有许多输入控件/验证程序控件。为了重用,这些控件作为用户控件捆绑在一起。例如,我的电子邮件用户控件包含一个面板,带有标签、文本框、必需的验证器和正则表达式验证器

我知道多视图加载了所有内容,然后隐藏了当前视图之外的控件,但是这给我带来了一个小问题,我正在寻找最佳的解决方法

下面是一个场景

面板3包含一个名为“Number”的用户控件。它有一个面板,包含标签、文本框和自定义验证器

该控件具有可以设置的属性(我通常在包含aspx的页面中设置它们),并且在页面加载时填充该控件

Aspx页面:

<uc4:Number ID="UC_Number" runat="server"
    Label="Monthly Take Home Pay" 
    MinValue="1"
    MaxValue="9999" />
我遇到的问题是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错误,因为引用的用户控件不可用,这反过来会导致页面上的其余javascript落在其ar*e上

我需要知道的是,如何安全地加载这些用户控件,即当视图可见时,或者修改与expando相关的代码以处理此问题


所有想法都受到赞赏

我通过检查usercontrol在预渲染if(this.visible)期间是否可见以及是否可见来解决这个问题,并调用expando stuff

    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);
        }
    }