0

Я пытаюсь создать веб-форму 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.

Случай 1: [Проводка без главной страницы]

collec.Count возвращается

Случай 2: [Проводка с главной страницы]

collec.Count возвращенного [ ЗАЧЕМ? ]

Позже

Я пытался передать данные с помощью свойств

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?

ответ

0

Сначала вы должны смотреть в контентной Закончен Место страницы представивший

Таким образом, код будет выглядеть следующим образом:

ContentPlaceHolder placeHolder = (ContentPlaceHolder)PreviousPage.Master.FindControl("ContentPlaceHolder1"); 
     TextBox txt1 = (TextBox)placeHolder.FindControl("TextBox1"); 

При использовании мастер-страницы с TextBox с идентификатором TextBox1 внутри Довольное управления привязаны к ContentPlaceHolder1 будет иметь свой атрибут ID продлил так:

<input name="ctl00$ContentPlaceHolder1$TextBox1" type="text" id="ContentPlaceHolder1_TextBox1" /> 

Но когда вы не используете мастер страницы нет 'ContentPlaceHolder', поэтому TextBox1 будет выглядеть следующим образом:

<input name="TextBox1" type="text" id="TextBox1" /> 
+0

Thankyou! Это решает мою проблему. Но я до сих пор не понимаю, почему Master.FindControl() требуется, когда мы переходим с одной страницы контента на другую страницу контента? – gaganKapula

+0

Предыдущая страница - это страница контента, основанная на главной странице. – Aria