Невозможно передать данные с одной страницы содержимого на другую с помощью главной страницы
Я пытаюсь создать веб-форму asp, которая отправляет данные в другую веб-форму.
Я сделал два отдельных проекта, один из которых использует главную страницу, а другой нет.
Senario:
WebForm1.aspx имеет два текстовых поля и кнопку отправки
<table>
<tr>
<td >Name:</td>
<td >
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</td>
<td class="auto-style1"></td>
</tr>
<tr>
<td>Id:</td>
<td>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
</td>
<td> </td>
</tr>
<tr>
<td> </td>
<td>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
</td>
<td> </td>
</tr>
</table>
WebForm2.aspx.cs имеет две метки, которые должны отображать данные, полученные из WebForm1.aspx
Page prevPage = this.PreviousPage;
if (prevPage != null)
{
Label1.Text = ((TextBox)prevPage.FindControl("TextBox1")).Text;
Label2.Text = ((TextBox)prevPage.FindControl("TextBox2")).Text;
}
Случай 1: [Проводка без главной страницы]
Данные размещены нормально.
Случай 2: [Проводка с главной страницей]
Я получаю NullReferenceException.
Поэтому я сломал код.
Page prevPage = this.PreviousPage;
if (prevPage != null)
{
ControlCollection collec = prevPage.Controls;
Control ctrl= prevPage.FindControl("TextBox1");
TextBox txtbx = (TextBox)ctrl;
Label1.Text = txtbx.Text; //Exception raised here
Label2.Text = ((TextBox)prevPage.FindControl("TextBox2")).Text;
}
Во время отладки: я выполнил "collec.Count" в Immediate Window.
Случай 1: [Проводка без главной страницы]
collec.Count вернул 5
Случай 2: [Проводка с главной страницей]
collec.Count вернул 1 [ПОЧЕМУ? ]
Потом,
Я пытался передать данные с помощью открытых свойств
WebForm1.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
Server.Transfer("WebForm2.aspx");
}
public string Name { get { return TextBox1.Text; } }
public string ID { get { return TextBox2.Text; } }
WebForm2.aspx.cs
WebForm1 prevPage = (WebForm1)this.PreviousPage;
if (prevPage != null)
{
ControlCollection c = prevPage.Controls;
Label1.Text = prevPage.Name;
Label2.Text = prevPage.ID;
}
и теперь он работает правильно, даже с главной страницей.
Так может кто-нибудь объяснить мне, что происходит и зачем отправлять сообщения с одной страницы контента на другую страницу контента, когда мастер дает мне исключение NullReferenceException?
1 ответ
Сначала вы должны просмотреть заполнитель содержимого на странице отправки.
Поэтому код будет выглядеть примерно так:
ContentPlaceHolder placeHolder = (ContentPlaceHolder)PreviousPage.Master.FindControl("ContentPlaceHolder1");
TextBox txt1 = (TextBox)placeHolder.FindControl("TextBox1");
При использовании главной страницы TextBox с идентификатором TextBox1 внутри элемента управления Content, связанного с ContentPlaceHolder1, будет иметь расширенный атрибут id, например:
<input name="ctl00$ContentPlaceHolder1$TextBox1" type="text" id="ContentPlaceHolder1_TextBox1" />
Но когда вы не используете главную страницу, ContentPlaceHolder отсутствует, поэтому TextBox1 будет отображаться так:
<input name="TextBox1" type="text" id="TextBox1" />