多视图控件和expando属性的问题

时间:2012-11-27 09:53:47

标签: .net ajax customvalidator multiview expando

我有一个多视图控件,我有效地使用相同的向导,通过4个面板来完成一个表单。

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

我知道在多视图中加载了所有内容,然后隐藏了当前视图之外的控件,但是这引起了一个小问题,我正在寻找最好的建议,如何解决它。

这是情景。

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

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

Aspx页面:

<uc4:Number ID="UC_Number" runat="server"
    Label="Monthly Take Home Pay" 
    MinValue="1"
    MaxValue="9999" />

Page_Load of number:

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错误,因为引用的用户控件不可用,这反过来导致页面上其余的javascript落在其ar * e上。 / p>

我需要知道的是,如何安全地加载这些用户控件I.e.当视图可见时,或者改变我的expando相关代码以应对此问题。

所有想法都赞赏。

1 个答案:

答案 0 :(得分:0)

我通过检查用户控件是否在预渲染期间是否可见(如果可见)来解决这个问题,如果这样,则调用expando。