Невозможно передать данные с одной страницы содержимого на другую с помощью главной страницы

Я пытаюсь создать веб-форму 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>&nbsp;</td>
        </tr>
        <tr>
            <td>&nbsp;</td>
            <td>
                <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
            </td>
            <td>&nbsp;</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" />
Другие вопросы по тегам