我正在用一个页面做一个asp.net应用程序。在此页面中,我定义了一个usercontrol。此用户控件有一个菜单(三个按钮)和3个用户控件。根据单击的按钮,三个用户控件中的一个变为可见的真或假。
在这三个用户控件中,我有一个按钮和一条消息,当我点击菜单按钮时,我想显示消息“它不是回发”,当点击用户控件的按钮时,消息将是“是的,这是回发!!!“。
问题是使用usercontrol或页面的属性“IsPostBack”消息永远不会是“它不回发”,因为菜单的单击按钮显示嵌套的用户控件。
这是页面的结构:
page
parent usercontrol
menu
nested usercontrol 1
message
button
nested usercontrol 2
nested usercontrol 3
我知道可以使用ViewState来完成,但有一种方法可以模拟IsPostBack属性或知道什么时候是真正的usercontrol回发?
感谢。
答案 0 :(得分:0)
我有解决这个问题的方法。当一个元素触发时,事件被发送到Request.Form集合中的服务器,所以我在嵌套的usercontrols中创建了一个属性,用于检查Request.Form集合中是否存在子控件(在usercontrol本身中定义):
public bool IsUserControlPostBack
{
get
{
foreach (Control c in Controls)
foreach(string key in Page.Request.Form.AllKeys)
if( c.ClientID == key.Replace('$','_'))
return true;
return false;
}
}
此代码可以是usercontrol的属性,或者,如果它被调用了很多次,则是在usercontrol的OnInit事件上设置的变量。