在我的初始页面加载中,我试图添加一堆文本框。我想要做的是,如果用户在那些文本框中键入内容我想要保留该文本。我使用占位符并在我的占位符中放置动态控件。每当page_loads ViewState为null时。我确定我做错了什么。任何帮助表示赞赏。
谢谢!
default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default"
ViewStateMode="Enabled" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server" enableviewstate="true">
<asp:PlaceHolder runat="server" ID="myPlacerHolder" EnableViewState="true"></asp:PlaceHolder>
<br />
<asp:Button runat="server" ID="_postbackButton" OnClick="_postbackButton_Click" Text="PostBack" />
</form>
</body>
</html>
Default.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
protected override void OnInit(EventArgs e)
{
if (ViewState["myPlaceHolder"] == null)
for (int i = 0; i < 10; i++)
{
Label myLabel = new Label();
myLabel.Text = i.ToString();
myPlacerHolder.Controls.Add(myLabel);
TextBox rtb = new TextBox();
rtb.ID = i.ToString() + "_TextBox";
rtb.Width = 200;
myPlacerHolder.Controls.Add(rtb);
myPlacerHolder.Controls.Add(new Literal() { ID = i.ToString() + "row", Text = "<br/>" });
}
else
myPlacerHolder = (PlaceHolder)ViewState["myPlaceHolder"];
if (ViewState["myPlaceHolder"] == null)
ViewState["myPlaceHolder"] = myPlacerHolder;
}
protected void Page_Load(object sender, EventArgs e)
{
}
protected void _postbackButton_Click(object sender, EventArgs e)
{
// do nothing just cause postback
}
}
答案 0 :(得分:0)
您的方法存在两个问题:
将控件分配给变量myPlacerHolder
并不会将该控件放在页面中。控件保留在页面中,变量引用了不在页面中的控件。
您无法重复为另一页的一个页面创建的控件。
每次加载页面时,只需重新创建TextBox
控件,他们将从发布回服务器的表单数据中选取输入的文本。