关于ASP.Net Postback的一些问题

时间:2010-03-18 15:57:55

标签: c# .net asp.net user-controls

假设我有一个文本框应该有一个默认值....它在初始化函数中是这样的:

void InitializeControls()
{
    myTextBox.Text = "Default Text";
}

现在,假设我有一个按钮,它会进行回发...我想在按钮的OnClick事件中的某处保存用户输入的文本框值。

我的问题是,我何时应该调用上面的初始化控制代码?我认为它应该在OnLoad函数中,但是这似乎我每次都会覆盖回发数据:

protected override void OnLoad(EventArgs eventArgs)
{
    base.OnLoad(eventArgs);

    InitializeControls();
}

如果我在OnLoad中有初始化代码,回发数据是否会覆盖我上面的默认文本?

由于

4 个答案:

答案 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();