0

好先生!

我一直在搞乱下一个场景:

首先,我有一个网络表单,其结构为包含 DevExpress ASPXPopUpControl 和其他一些控件的 WebForm。在 PopUpControl 内部有一个包含其他控件的 UserControl(我们称之为 ucA)和一个包含受诅咒的 ASPxHtmlEditor(因为它是新要求而添加)的 UserControl(称为 ucB)。

当用户点击主 webform 上的按钮时,我显示包含 ucA 的 PopUp(最初是一个 jQuery 对话框,但由于 HTMLEditor 与 jQuery 混淆,我被迫打破标准并使用弹出窗口)。用户在 ucA 中填写一些字段并点击保存按钮。用户点击后,我保存了一些数据,此时我需要恢复放置在网络表单中的文本框值。

我正在使用 Parent.FindControl["myTextBox"] 但它认为 popupcontrol 作为父级。当我使用 jQuery(在实现编辑器之前)时,它就像一个魅力。

我觉得这是一件微不足道的事情,但当我说这偷走了许多小时的研究时,我感到很震惊。

提前致谢。

编辑我忘了提到我想在主网络表单中寻找另一个用户控件。此 uc 用于向用户显示核心消息,因此当他点击保存按钮时,会发生保存,弹出窗口已关闭,我从 ucA 中查看 (Parent.FindControl("myUCMessageBoard")) 以便用户控件显示“事务完成“ 信息。

4

2 回答 2

1

我认为您将不得不通过使用ViewState. 如果我理解正确,您正在尝试从嵌套在 PopupControl 中的 UserControl 访问 Web 窗体上的TextBox's Text(因此您不能一直遍历到 Web 窗体级别)。

因此,在此过程中的某个时刻,我要做的是将文本存储在 ViewState 变量中,您可以从用户控件访问该变量。这不是最佳的,但既然你已经在破解它来让它工作,那么还有什么黑客攻击呢?

于 2013-07-09T19:54:48.747 回答
0

您应该将 ucA 中的所有控件公开为属性,然后以与您相同的方式在 DevxPopup 中查找控件。鉴于您在 ucA 上需要的所有控件都具有访问它们的属性,您可以执行您需要的所有逻辑!

例子:

public ucA : UserControl
{
    public string myTextBoxText 
    { 
        get 
        {
            return ((TextBox)Controls.FindControl("myTextBox")).Text;
        }
    }
    /*And lot of controls*/
}

然后你在表单中寻找弹出窗口

var ucA = (UcA)Form.Controls.FindControl("myPopup").Controls.FindControl("myucA");
ucA.myTextBoxText = /*Do stuff here with the text*/

希望这对你有帮助!

于 2013-07-09T19:46:25.760 回答