假设我有一个文本框应该有一个默认值....它在初始化函数中是这样的:
void InitializeControls()
{
myTextBox.Text = "Default Text";
}
现在,假设我有一个按钮,它会进行回发...我想在按钮的OnClick事件中的某处保存用户输入的文本框值。
我的问题是,我何时应该调用上面的初始化控制代码?我认为它应该在OnLoad函数中,但是这似乎我每次都会覆盖回发数据:
protected override void OnLoad(EventArgs eventArgs)
{
base.OnLoad(eventArgs);
InitializeControls();
}
如果我在OnLoad中有初始化代码,回发数据是否会覆盖我上面的默认文本?
由于
答案 0 :(得分:4)
如果您通过调用Page_Load中的InitializeControl()手动设置文本,则在回发期间用户输入的文本框值将丢失。
alt text http://i.msdn.microsoft.com/ms972976.viewstate_fig02%28en-us,MSDN.10%29.gif
Per durilai的评论,在!IsPostBack
if-block中放置您希望仅在第一次加载页面时发生的代码:
if (!IsPostBack) {
InitializeControls();
}
答案 1 :(得分:2)
我认为您可能正在寻找代码
if (!Page.IsPostBack)
这使您可以处理那些只应在首次加载时发生的事情。
答案 2 :(得分:2)
在致电InitializeControls()
之前,在OnInit
中致电base.OnInit()
。这样,您的默认值将不会成为ViewState的一部分,您将无法将其传递给客户端并无理由退回。
您也可以在标记中设置默认值(在.aspx文件中)。
不在PageLoad / OnLoad中调用InitializeControls(),因为这会将默认值添加到ViewState,无缘无故地膨胀ViewState。
阅读文章TRULY understanding ViewState以便更好地了解这些内容。
答案 3 :(得分:0)
您也可以在标记的文本框中设置默认值,然后您不必担心在代码中设置默认值并检查回发。否则,Page_Load和OnLoad都是设置默认值的合适位置。您需要检查页面是否已回发,如果是,请不要覆盖用户的值:
if (!IsPostBack)
InitializeControls();