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



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

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

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

下面是场景。

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

为了允许在客户端上进行自定义验证,我添加了两个新的expando属性。这会导致一个问题,因为创建了属性,但用户控件随后被多视图隐藏。

.net ajax代码不能很好地处理这一问题,并导致javascript错误,因为引用的用户控件不可用,这反过来又导致页面上的其余javascript落在其ar*e上。

我需要知道的是,我如何安全地加载这些用户控件,即当视图可见时,或者修改我的expando相关代码来应对这种情况。

感谢所有的想法。

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

最新更新