C# 关于ASP.Net回发的几个问题

C# 关于ASP.Net回发的几个问题,c#,.net,asp.net,user-controls,C#,.net,Asp.net,User Controls,假设我有一个文本框,它应该有一个默认值。。。。它在初始化函数中,如下所示: void InitializeControls() { myTextBox.Text = "Default Text"; } 现在,让我们假设我有一个按钮,它可以进行回发。。。我想将用户输入的文本框值保存在按钮OnClick事件的某个位置 我的问题是,我应该在什么时候调用上面的初始化控制代码?我认为它应该在OnLoad函数中,但是这似乎每次都会覆盖回发数据: protected override void On

假设我有一个文本框,它应该有一个默认值。。。。它在初始化函数中,如下所示:

void InitializeControls()
{
    myTextBox.Text = "Default Text";
}
现在,让我们假设我有一个按钮,它可以进行回发。。。我想将用户输入的文本框值保存在按钮OnClick事件的某个位置

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

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

    InitializeControls();
}
如果在OnLoad中有初始化代码,回发数据会覆盖上面的默认文本吗


谢谢

如果您通过调用页面加载中的InitializeControl()手动设置文本,则用户输入的文本框值将在回发过程中丢失


(来源:)

根据durilai的评论,将其放在
中!IsPostBack
如果只在页面首次加载时阻止您希望发生的代码:

if (!IsPostBack) {
    InitializeControls();
}

我想你可能正在寻找代码

if (!Page.IsPostBack) 

这样,您就可以处理只有在第一次加载时才会发生的事情。

您也可以在标记的文本框中设置默认值,这样您就不必担心在代码中设置默认值和检查回发。否则,Page_Load和OnLoad都是设置默认值的合适位置。您需要检查页面是否已回发,如果已回发,请不要覆盖用户的值:

if (!IsPostBack)
    InitializeControls();

在调用
base.OnInit()
之前,在
OnInit
中调用
initializeControl()
。这样,默认值就不会成为ViewState的一部分,也不会无缘无故地将其传递给客户机并返回。 您也可以在标记中设置默认值(在.aspx文件中)

不要在PageLoad/OnLoad中调用InitializeControl(),因为这会将默认值添加到ViewState,从而使ViewState无缘无故膨胀


阅读本文以更好地理解这些内容。

所以我应该只在不回发的情况下设置默认值?使用动态控件如何?除非使用if(!ispostback)将其包装,否则在Page_Load中设置值将导致ViewState无故跟踪它,从而不必要地放大ViewState。在调用base.OnInit之前(在调用base.OnInit()ViewState开始跟踪更改之后),应该在OnInit中设置默认值,那么实际何时加载回发值?如果控件是动态的呢?我问这个问题是因为我想知道我是否可以在OnInit中调用这个函数,然后回发值就会覆盖默认值。。。理想情况下,添加的控件会有所不同,这取决于您在页面生命周期中将它们添加到控件层次结构中的位置。。。