Jen*_*nan 5 c# asp.net user-controls
我有两个usercontrols:UserControl1并且UserControl2,这些控件添加在Page.aspx中.
UserControl1:此usercontrol包含此usercontrol中隐藏文本框的方法.这种方法叫做" HideTextbox"
UserControl2:我想调用方法" HideTextBox" UserControl2.
我怎样才能调用方法HideTextBox从UserControl2?
只有当两者都是用户控件或服务器控件,或者您正在寻找来自usercontrol的servercontrol时,这才有效.(不是来自servercontrol,因为你无法获得对asp.usercontrol_xx程序集的引用)
首先获取对父页面的引用(通常可以这样做this.Parent.接下来在父项上执行递归FindControl以查找类型为的控件UserControl2.示例代码:
//this for extension method
public static UserControl2 FindUserControl2Recursive(this Control root)
{
var uc2 = root as ASP.UserControls_UserControl2_ascx;
if (uc2 != null)
{
return uc2;
}
foreach (var control in root.Controls)
{
uc2 = control.FindUserControl2Recursive();
if (uc2 != null)
{
return uc2;
}
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
获得Usercontrol2参考后,您可以轻松调用您的公共方法.
通过在UC2中创建自定义事件并在主页上使用该事件以在UC1上调用hide方法,可以解决此问题。
您在用户控件中声明一个委托
public delegate void HideTextBoxEventHandler(object sender, EventArgs e);
Run Code Online (Sandbox Code Playgroud)
然后为您创建的委托定义事件
public event HideTextBoxEventHandler HideTextBox;
Run Code Online (Sandbox Code Playgroud)
在代码中要隐藏文本框的位置,您需要调用该事件:
if (this.HideTextBox != null) // if there is no event handler then it will be null and invoking it will throw an error.
{
EventArgs e = new EventArgs();
this.HideTextBox(this, e);
}
Run Code Online (Sandbox Code Playgroud)
然后从主页创建一个事件处理方法
protected void UserControl2_HideTextBox(Object sender, EventArgs e)
{
UC1.InvokeHideTextBox(); // this is the code in UC1 that does the hiding
}
Run Code Online (Sandbox Code Playgroud)
您将需要添加到页面加载或将UC2加载到任何地方
UC2.HideTextBox += new UserControl2.HideTextBoxEventHandler(this.UserControl2_HideTextBox);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18245 次 |
| 最近记录: |