Как сохранить элементы управления через ViewState

На начальной загрузке страницы я пытаюсь добавить несколько текстовых полей. Что я хочу сделать, так это если пользователь вводит что-то в эти текстовые поля, я хочу сохранить этот текст. Я использую заполнитель и размещаю динамические элементы управления внутри моего заполнителя. Всякий раз, когда 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
}
}

1 ответ

Есть два проблемы с вашим подходом:

  1. Назначение элемента управления переменной myPlacerHolder не помещает этот элемент управления на странице. Элемент управления остается на странице, а переменная имеет ссылку на элемент управления, которого нет на странице.

  2. Вы не можете повторно использовать элементы управления, созданные для одной страницы на другой странице.

Просто воссоздать TextBox контролирует каждый раз, когда страница загружается, и они выбирают введенный текст из данных формы, которые отправляются обратно на сервер.

Другие вопросы по тегам