如何通过ViewState维护控件

时间:2014-10-31 00:12:49

标签: asp.net postback viewstate

在我的初始页面加载中,我试图添加一堆文本框。我想要做的是,如果用户在那些文本框中键入内容我想要保留该文本。我使用占位符并在我的占位符中放置动态控件。每当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
}
}

1 个答案:

答案 0 :(得分:0)

您的方法存在两个问题:

  1. 将控件分配给变量myPlacerHolder并不会将该控件放在页面中。控件保留在页面中,变量引用了不在页面中的控件。

  2. 您无法重复为另一页的一个页面创建的控件。

  3. 每次加载页面时,只需重新创建TextBox控件,他们将从发布回服务器的表单数据中选取输入的文本。