Asp.net ViewState后面的ASPX代码未保存

Asp.net ViewState后面的ASPX代码未保存,asp.net,postback,viewstate,Asp.net,Postback,Viewstate,我试图在回发期间使用ViewState保留文本框的输入。代码如下: private Label store_Incident_Number = new Label(); private TextBox Incident_Number = new TextBox(); protected void Page_Load(object sender, EventArgs e) { if (ViewState["Incident_Number"] != null)

我试图在回发期间使用ViewState保留文本框的输入。代码如下:

 private Label store_Incident_Number = new Label();
 private TextBox Incident_Number = new TextBox();

    protected void Page_Load(object sender, EventArgs e)
    {
        if (ViewState["Incident_Number"] != null)
        {                
            store_Incident_Number.Text = "TEST" + (string)ViewState["Incident_Number"];
            Panel1.Controls.Add(store_Incident_Number);
        }
    }

    void Page_PreRender(object sender, EventArgs e)
    {
        ViewState.Add("Incident_Number", Incident_Number.Text);

    }  
上述代码位于my default.aspx.cs(代码隐藏)中。
Panel1
是一个asp控件,位于网页上表单标记之外的某些位置。我试图遵循以下示例:

我希望事件编号文本框的文本在页面回发后保存到标签上,但它似乎不起作用,我无法找出问题所在。请注意,文本框将动态添加到页面的表单中,并在每次回发时重新创建。我的问题是如何编写代码以在页面回发后保留文本框的值

编辑:修正!请看我接受的答案。此外,任何eventhandler 或其他可能触发另一次回发的进程 在Page_Init期间,将刷新保存在viewstate中的值(即保存的文本消失)


这是因为页面加载方法在预呈现之前运行。您可以在Google asp.net页面lifecicle中查找更多详细信息

这里基本上是在将标签值添加到viewstate之前加载标签值


另外,如果你能告诉我们你到底是怎么回邮的,那也会有帮助。例如,因为单击事件也是页面生命周期的一部分,这可能会改变一些事情。

发生这种情况是因为页面加载方法在预呈现之前运行。您可以在Google asp.net页面lifecicle中查找更多详细信息

这里基本上是在将标签值添加到viewstate之前加载标签值


另外,如果你能告诉我们你到底是怎么回邮的,那也会有帮助。例如,单击事件也是页面生命周期的一部分,这可能会改变一些事情。

正如我在评论中提到的,您不能让WebForms系统为您工作。下面是一个表单示例,其中动态创建的控件维护viewstate。根据您的描述,该面板位于窗体外部

显示页面时,您可以输入新文本并反复单击提交。文本框值将自动保留

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    </form>
    <asp:Panel ID="Panel1" runat="server"></asp:Panel>
</body>
</html>

正如我在评论中提到的那样,您不能让WebForms系统为您工作。下面是一个表单示例,其中动态创建的控件维护viewstate。根据您的描述,该面板位于窗体外部

显示页面时,您可以输入新文本并反复单击提交。文本框值将自动保留

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    </form>
    <asp:Panel ID="Panel1" runat="server"></asp:Panel>
</body>
</html>

谢谢我以为我知道页面的生命周期,显然我不知道。如何做到这一点?此外,我将更新我的帖子,包括回发是如何完成的。我以为我知道页面的生命周期,显然我不知道。如何做到这一点?此外,我将更新我的帖子,以包括回发是如何完成的。此外,我还试图遵循这个例子:我认为你工作比你需要的更努力。如果您在ASP.NET WebForms环境中使用控件,只要您正确处理页面生命周期,许多控件(包括TextBox)都具有自动viewstate管理。在Page_Init事件中将文本框添加到表单中,然后在Page_Load事件发生之前,它的viewstate将自动恢复(假设它每次都具有相同的ID),因此用户输入的文本将得到维护。我认为您的工作比需要的更努力。如果您在ASP.NET WebForms环境中使用控件,只要您正确处理页面生命周期,许多控件(包括TextBox)都具有自动viewstate管理。在Page_Init事件中将文本框添加到表单中,然后在Page_Load事件发生之前自动恢复其viewstate(假设每次都具有相同的ID)因此,用户输入的文本将被保留。我的问题是-为了让viewstate保存/加载其值,回发后页面上需要显示动态控件?如果这是正确的,我实际上有一个新的问题,但我宁愿再次张贴,以避免文本墙。这是关于一个下拉列表(加载差异控件)和一个提交按钮,两者都会触发回发。我在这里的时间不多了,我将在明天早上第一件事发布它,谢谢用户2638401是的。Page_Init事件完成后,页面上具有viewstate的任何控件(无论是ASPX文件中的静态控件还是在Page_Init期间动态添加的控件)都将恢复(如果用户使用最新帖子更改了某些内容,则会进行更新)。所以你在page_Init期间构建页面的结构,并在page_加载期间处理控件的内容。我感觉这会起作用。我会让你知道,一旦我更新了我的代码。谢谢它起作用了!为了向您提供信息,我在Page_Init期间有一个事件处理程序,它实际上会导致错误(另一次回发?),从而删除保存在viewstate中的值。我的问题是-回发后页面上需要存在动态控件,以便viewstate保存/加载其值?如果这是正确的,我实际上有一个新的问题,但我宁愿再次张贴,以避免文本墙。这是关于一个下拉列表(加载差异控件)和一个提交按钮,两者都会触发回发。我在这里的时间不多了,我将在明天早上第一件事发布它,谢谢用户2638401是的。Page_Init事件完成后,页面上具有viewstate的任何控件(无论是ASPX文件中的静态控件还是在Page_Init期间动态添加的控件)都将恢复(如果用户使用最新帖子更改了某些内容,则会进行更新)。所以你在page_Init期间构建页面的结构,并在page_加载期间处理控件的内容。我感觉这会起作用。我会让你知道,一旦我更新了我的代码。谢谢它起作用了!为了向您提供信息,我在Page_Init期间有一个事件处理程序,它实际上会导致错误(一个