我正在尝试使用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);
}
上面的代码位于我的default.aspx.cs(代码隐藏)中。 Panel1
是一个asp控件,位于表单标记之外的网页上。我试着效仿这个例子:https://msdn.microsoft.com/en-us/library/ms227551(v=vs.85).aspx
我希望在页面回发后将Incident_Number文本框的文本保存到标签上,但它似乎不起作用,我无法弄清楚问题。请注意,文本框会动态添加到页面的表单中,并在每次回发时重新创建。我的问题是如何编写代码以在页面回发后保留文本框的值?
编辑:修正了!请看我接受的答案。此外,任何事件处理程序 或其他有可能触发另一个回发的进程 在Page_Init期间将刷新保存在viewstate中的值(即保存的文本消失)。
答案 0 :(得分:2)
这是因为页面加载方法在预渲染之前运行。您可以通过Google asp.net页面lifecicle查找更多详细信息。
您在此处的基本操作是在将标签值添加到视图状态之前加载标签值。
此外,如果你能告诉我们你是如何进行回发的,那将会有所帮助。例如,因为点击事件也是页面生命周期的一部分,这可能会改变一些事情。
答案 1 :(得分:1)
正如我在评论中提到的,您不会让WebForms系统为您工作。这是一个动态创建控件维护视图状态的表单示例。根据您的描述,该小组不在表格中。
显示页面时,您可以输入新文本并重复单击提交。 TextBox值将自动保留。
<强> 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>
<强> Default.aspx.cs 强>
using System;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
private Label store_Incident_Number = new Label();
private TextBox Incident_Number = new TextBox() { ID = "TextBox1" };
private Button SubmitButton = new Button() { ID = "Button1", Text = "Submit" };
protected void Page_Init(object sender, EventArgs e)
{
// what is created during this event has viewstate restored to it
Panel1.Controls.Add(store_Incident_Number);
form1.Controls.Add(Incident_Number);
form1.Controls.Add(SubmitButton);
}
protected void Page_Load(object sender, EventArgs e)
{
// the viewstate has already been restored so you can access the content of the TextBox
store_Incident_Number.Text = Incident_Number.Text;
}
}