【问题标题】:How to maintain controls through ViewState如何通过 ViewState 维护控件
【发布时间】:2014-10-31 00:12:48
【问题描述】:

在我的初始页面加载中,我尝试添加一堆文本框。我想要做的是,如果用户在我想要维护该文本的那些文本框中键入内容。我正在使用占位符并将动态控件放置在占位符内。每当 page_loads ViewState 为空时。我确定我做错了什么。任何帮助表示赞赏。

谢谢!

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
}
}

【问题讨论】:

    标签: asp.net postback viewstate


    【解决方案1】:

    你的方法有两个问题:

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

    2. 您不能在另一个页面中重复使用为一个页面创建的控件。

    只需在每次页面加载时重新创建TextBox 控件,它们就会从发送回服务器的表单数据中提取输入的文本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-06
      • 1970-01-01
      • 2011-02-22
      • 2017-06-12
      • 1970-01-01
      相关资源
      最近更新 更多