【问题标题】:Issue with multiview control and expando attributes多视图控制和扩展属性问题
【发布时间】:2012-11-14 21:55:04
【问题描述】:

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

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

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

这是场景。

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

该控件具有可以设置的属性(我通常在包含的 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 错误,因为引用的用户控件不可用,进而导致页面上的其余 javascript 落在其 ar*e 上。

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

感谢所有想法。

【问题讨论】:

    标签: .net ajax customvalidator multiview expando


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-23
      • 1970-01-01
      相关资源
      最近更新 更多