Как сохранить элементы управления через 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 ответ
Есть два проблемы с вашим подходом:
Назначение элемента управления переменной
myPlacerHolder
не помещает этот элемент управления на странице. Элемент управления остается на странице, а переменная имеет ссылку на элемент управления, которого нет на странице.Вы не можете повторно использовать элементы управления, созданные для одной страницы на другой странице.
Просто воссоздать TextBox
контролирует каждый раз, когда страница загружается, и они выбирают введенный текст из данных формы, которые отправляются обратно на сервер.