用户控件中设置一个属性,如:private bool _IsList = false;
public bool IsList
{
set{_IsList = value;}
}调用用户控件的页面中设置一个BUTTON,当Button回发时,设置用户控件的IsList属性,假设用户控件ID为ClassID,如下代码: protected void Button1_Click(object sender, EventArgs e)
{
ClassID.IsList = true;
}
问题:当页面回发时按上面这样无法设置用户控件的IsList属性,断点调试了一下,当页面回发时页面的执行顺序是,先执行页面的Page_Load,再执行用户控件的Page_Load(如果在页面的Page_Load中设置了属性值此时也会生效),然后再执行页面的回发事件,如上面的Button1_Click,最后一步仅仅是设置了用户控件的属性就停止了,没有再接着执行页面控件的Page_Load.如何解决?如下代码虽然可以解决,但始终觉得别扭。 #region 是否以列表形式显示,默认为下拉
/// <summary>
/// 是否以列表形式显示,默认为下拉
/// </summary>
private bool _IsList = false;
public bool IsList
{
set
{
if (!IsPostBack)
{
_IsList = value;
}
else
{
//具体的执行代码,以下代码其实已经在用户控件的Page_Load中写过一次了
if (_IsList)
{
ClassListID.Attributes.Add("size", "20");
ClassListID.Style.Add(HtmlTextWriterStyle.Width, "280px;");
}
//感觉此处应该再调用一次Page_Load,但如何调用呢?
}
}
}
public bool IsList
{
set{_IsList = value;}
}调用用户控件的页面中设置一个BUTTON,当Button回发时,设置用户控件的IsList属性,假设用户控件ID为ClassID,如下代码: protected void Button1_Click(object sender, EventArgs e)
{
ClassID.IsList = true;
}
问题:当页面回发时按上面这样无法设置用户控件的IsList属性,断点调试了一下,当页面回发时页面的执行顺序是,先执行页面的Page_Load,再执行用户控件的Page_Load(如果在页面的Page_Load中设置了属性值此时也会生效),然后再执行页面的回发事件,如上面的Button1_Click,最后一步仅仅是设置了用户控件的属性就停止了,没有再接着执行页面控件的Page_Load.如何解决?如下代码虽然可以解决,但始终觉得别扭。 #region 是否以列表形式显示,默认为下拉
/// <summary>
/// 是否以列表形式显示,默认为下拉
/// </summary>
private bool _IsList = false;
public bool IsList
{
set
{
if (!IsPostBack)
{
_IsList = value;
}
else
{
//具体的执行代码,以下代码其实已经在用户控件的Page_Load中写过一次了
if (_IsList)
{
ClassListID.Attributes.Add("size", "20");
ClassListID.Style.Add(HtmlTextWriterStyle.Width, "280px;");
}
//感觉此处应该再调用一次Page_Load,但如何调用呢?
}
}
}
http://blog.csdn.net/ojlovecd/article/details/2691116
其次,你在控件的Page_Load里做什么操作了?为什么在Button事件赋值以后你要重新执行控件的Page_Load?
public partial class Admin_Class_list : System.Web.UI.UserControl
{
#region 是否允许修改,默认允许修改
/// <summary>
/// 是否允许修改,默认允许修改
/// </summary>
private bool _Enable = true;
public bool Enable
{
set
{
_Enable = value;
if(IsPostBack)
{
if (!_Enable)
{
ClassListID.Attributes.Add("disabled", "disabled");
}
}
}
}
#endregion #region 是否以列表形式显示,默认为下拉
/// <summary>
/// 是否以列表形式显示,默认为下拉
/// </summary>
private bool _IsList = false;
public bool IsList
{
set
{
_IsList = value;
if (IsPostBack)
{
if (_IsList)
{
ClassListID.Attributes.Add("size", "20");
ClassListID.Style.Add(HtmlTextWriterStyle.Width, "280px;");
}
}
}
}
#endregion
#region 是否显示选择项,默认显示
/// <summary>
/// 是否显示选择项,默认显示
/// </summary>
private bool _ShowFirst = true;
public bool ShowFirst
{
set { _ShowFirst = value; }
}
#endregion #region 一级分类的文字说明,默认"---请选择---"
/// <summary>
/// 一级分类的文字说明,默认"---请选择---"
/// </summary>
private string _FirstText = "---请选择---";
public string FirstText
{
set { FirstText = value; }
}
#endregion
#region 获取或设置DropDwonList的选定值
/// <summary>
/// 获取或设置DropDwonList的选定值
/// </summary>
private string _SetSelectValue;
private string _GetSelectValue;
public string SelectValue
{
set
{
if (IsPostBack)
{
ClassListID.SelectedValue = value;
}
else
{
_SetSelectValue = value;
}
}
get { return _GetSelectValue; }
}
#endregion protected void Page_Load(object sender, EventArgs e)
{
_GetSelectValue = ClassListID.SelectedValue;
ClassListID.Items.Clear();
string Sql;
if (Cache["ClassID"] != null && Cache["ClassID"].ToString() != "")
{
Sql = "SELECT * FROM ProjectClass WHERE ProjectClass.ParentPath LIKE '%" + Cache["ClassID"].ToString() + ",%' Or ParentID = " + Cache["ClassID"].ToString() + " ORDER BY RootID,OrderID";
}
else
{
Sql = "SELECT * FROM ProjectClass ORDER BY RootID,OrderID";
}
SqlDataReader dr = SqlHelper.ExecuteReader(SqlHelper.ConnectionString, CommandType.Text, Sql);
if (!_Enable)
{
ClassListID.Attributes.Add("disabled", "disabled");
}
if (_IsList)
{
ClassListID.Attributes.Add("size", "20");
ClassListID.Style.Add(HtmlTextWriterStyle.Width, "280px;");
}
if (_ShowFirst)
{
ClassListID.Items.Add(new ListItem(_FirstText, "0"));
}
while (dr.Read())
{
string Nbsp = null; //加空格的变量;
string optionText = null;
if (Convert.ToInt16(dr["ParentID"]) == 0)
{
optionText = HttpUtility.HtmlDecode(" ") + dr["ClassName"];
}
else
{ int STM_Path = Convert.ToInt16(dr["Depth"]); //如果ParentID不为0说明不是根元素,求出它是那层元素;
for (int i = 0; i < STM_Path; i++)
{
//每一层加4个空格;
Nbsp += HttpUtility.HtmlDecode(" "); }
optionText = Nbsp + "├" + dr["ClassName"];
} ClassListID.Items.Add(new ListItem(optionText, dr["ClassID"].ToString()));
}
dr.Close();
dr.Dispose();
if (!IsPostBack)
{
ClassListID.SelectedValue = _SetSelectValue;
}
}
}
{
_GetSelectValue = ClassListID.SelectedValue;
ClassListID.Items.Clear();
string Sql;
if (Cache["ClassID"] != null && Cache["ClassID"].ToString() != "")
{
Sql = "SELECT * FROM ProjectClass WHERE ProjectClass.ParentPath LIKE '%" + Cache["ClassID"].ToString() + ",%' Or ParentID = " + Cache["ClassID"].ToString() + " ORDER BY RootID,OrderID";
}
else
{
Sql = "SELECT * FROM ProjectClass ORDER BY RootID,OrderID";
}
SqlDataReader dr = SqlHelper.ExecuteReader(SqlHelper.ConnectionString, CommandType.Text, Sql);
if (!_Enable)
{
ClassListID.Attributes.Add("disabled", "disabled");
}
if (_IsList)
{
ClassListID.Attributes.Add("size", "20");
ClassListID.Style.Add(HtmlTextWriterStyle.Width, "280px;");
}
if (_ShowFirst)
{
ClassListID.Items.Add(new ListItem(_FirstText, "0"));
}
while (dr.Read())
{
string Nbsp = null; //加空格的变量;
string optionText = null;
if (Convert.ToInt16(dr["ParentID"]) == 0)
{
optionText = HttpUtility.HtmlDecode(" ") + dr["ClassName"];
}
else
{ int STM_Path = Convert.ToInt16(dr["Depth"]); //如果ParentID不为0说明不是根元素,求出它是那层元素;
for (int i = 0; i < STM_Path; i++)
{
//每一层加4个空格;
Nbsp += HttpUtility.HtmlDecode(" "); }
optionText = Nbsp + "├" + dr["ClassName"];
} ClassListID.Items.Add(new ListItem(optionText, dr["ClassID"].ToString()));
}
dr.Close();
dr.Dispose();
} protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GetData();
ClassListID.SelectedValue = _SetSelectValue;
}
}然后在页面的Button事件中: protected void Button1_Click(object sender, EventArgs e)
{
ClassID.IsList = true;
ClassID.GetData();
}
我的关键问题是要在页面的回发事件中去设置用户控件的属性值,ViewState应该是保持控件状态的吧,所以应该用不上.还是要谢谢你回复.
{
ClassID.IsList = true;
ClassID.GetData();
}
执行过程是,先执行按钮下面的事件,然后回发,执行page_onload事件,
如果回发显示数据,就需要类似于数据绑定控件的事件里面一样 的处理方式有兴趣可以加入.net开源交流群 共同讨论学习69594961