2015-12-03 8 views
3

Я пытаюсь сделать страницу подтверждения для формы бронирования. И у меня возникли проблемы с получением значения из моих предыдущих элементов управления страницами. У меня все работает на сервере, и у меня есть кнопка отправки PostBackURL, указывающая на страницу подтверждения. Все компилируется, но когда я помещаю информацию и получаю сообщение, единственное, что появляется, это мои логические значения, которые на самом деле не отражают истинное значение из-за моих if-elses. Я пробовал миллион различных попыток захвата/ценности захвата, и эта текущая форма является самой близкой из всех, к которой я пришел. Любая помощь будет принята с благодарностью. Также как получить следующую строку, например \ n в String.format? \ n, похоже, не работает. страница Подтверждение выглядит ASPX этогополучение значений из PreviousPage.FindControl

ConfirmationPage.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 Default2 : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
      string numNights = Convert.ToString((TextBox)PreviousPage.FindControl("txtNights.Text")); 
      string arrivalDate = Convert.ToString((TextBox)PreviousPage.FindControl("txtArrivalDate.Text")); 
      string numAdults = Convert.ToString((DropDownList)PreviousPage.FindControl("ddlAdults.SelectedValue.Text")); 
      string numChildren = Convert.ToString((DropDownList)PreviousPage.FindControl("ddlChildren.SelectedValue.Text")); 
      string roomTypeBusiness = "false"; 
      string roomTypeSuite = "false"; 
      string roomTypeStandard = "false"; 
      string bedTypeKing = "false"; 
      string bedTypeDouble = "false"; 
      string smokingOption = "false"; 

      if (Convert.ToBoolean(PreviousPage.FindControl("rdoBusiness.Checked"))) 
       roomTypeBusiness = "true"; 
      else if (Convert.ToBoolean(PreviousPage.FindControl("rdoSuite.Checked"))) 
       roomTypeSuite = "true"; 
      else 
       roomTypeStandard = "true"; 

      if (Convert.ToBoolean(PreviousPage.FindControl("rdoKing.Checked"))) 
       bedTypeKing = "true"; 
      else 
       bedTypeDouble = "true"; 

      string specialRequests = Convert.ToString((TextBox)PreviousPage.FindControl("txtSpecialRequests.Text")); 
      string name = Convert.ToString((TextBox)PreviousPage.FindControl("txtName.Text")); 
      string email = Convert.ToString((TextBox)PreviousPage.FindControl("txtEmail.Text")); 

      lblResults.Text = String.Format("Arrival Date: {0} \r\n Number of Nights: {1} \n Number of Adults: \r {2} Number of Children: {3} Business Room: {4} Suite Room: {5} Standard Room: {6} King Bed: {7} Double Bed: {8} Smoking: {9} Special Requests: {10} Name: {11} E-mail: {12}", 
      arrivalDate, numNights, numAdults, numChildren, roomTypeBusiness, roomTypeSuite, roomTypeStandard, bedTypeKing, bedTypeDouble, smokingOption, specialRequests, name, email); 
    } 
} 

предыдущая страница является

<%@ Page Title="" Language="C#" MasterPageFile="~/ResultsPageHTML5MasterPage/ResultsPageHTML5MasterPage.master" AutoEventWireup="true" CodeFile="ReservationForm_SqlInject.aspx.cs" Inherits="Default3" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> 
    <h1>My Home Away From Home Hotels</h1> 
     <h2>Where you&rsquo;re always treated like family</h2> 
    <p> 
     Arrival date: &nbsp; 

     <asp:TextBox ID="txtArrivalDate" runat="server" Width="75px">TextBoxHere</asp:TextBox> 
     &nbsp; 

     <asp:ImageButton ID="ibtnCalendar" runat="server" ImageAlign="Top" ImageUrl="~/Images/Calendar.bmp" OnClick="ibtnCalendar_Click" /> 
    </p> 
    <p> 
     <asp:Calendar ID="clnArrival" runat="server" Visible="False" 
      OnSelectionChanged="clnArrival_SelectionChanged" BackColor="White" 
      BorderColor="Black" DayNameFormat="Shortest" Font-Names="Times New Roman" 
      Font-Size="10pt" ForeColor="Black" Height="220px" NextPrevFormat="FullMonth" 
      TitleFormat="Month" Width="400px"> 
      <DayHeaderStyle BackColor="#CCCCCC" Font-Bold="True" Font-Size="7pt" 
       ForeColor="#333333" Height="10pt" /> 
      <DayStyle Width="14%" /> 
      <NextPrevStyle Font-Size="8pt" ForeColor="White" /> 
      <OtherMonthDayStyle ForeColor="#999999" /> 
      <SelectedDayStyle BackColor="#CC3333" ForeColor="White" /> 
      <SelectorStyle BackColor="#CCCCCC" Font-Bold="True" Font-Names="Verdana" 
       Font-Size="8pt" ForeColor="#333333" Width="1%" /> 
      <TitleStyle BackColor="Black" Font-Bold="True" Font-Size="13pt" 
       ForeColor="White" Height="14pt" /> 
      <TodayDayStyle BackColor="#CCCC99" /> 
     </asp:Calendar> 
    </p> 
    <p> 
     Number of nights: &nbsp; 
     <asp:TextBox ID="txtNights" runat="server" Width="45px"></asp:TextBox> 
    </p> 
    <p> 
     Number of Adults: &nbsp; 
     <asp:DropDownList ID="ddlAdults" runat="server" Width="50px"></asp:DropDownList> 
     &nbsp;&nbsp; 
     Number of Children: &nbsp; 
     <asp:DropDownList ID="ddlChildren" runat="server" Width="50px"></asp:DropDownList> 
    </p> 
    <h3>Preferences</h3> 
    <p> 
     Room Type: &nbsp; 
     <asp:RadioButton ID="rdoBusiness" runat="server" GroupName="Room" Text="Business" /> 
     <asp:RadioButton ID="rdoStandard" runat="server" GroupName="Room" Text="Standard" /> 
     <asp:RadioButton ID="rdoSuite" runat="server" GroupName="Room" Text="Suite" /> 
    </p> 
    <p> 
     Bed Type: 
     &nbsp; 
     <asp:RadioButton ID="rdoKing" runat="server" GroupName="Bed" Text="King" /> 
     &nbsp; 
     <asp:RadioButton ID="rdoDouble" runat="server" GroupName="Bed" Text="Double" /> 
    </p> 
    <p> 
     <asp:CheckBox ID="chkSmoking" runat="server" Text="Smoking" /> 
    </p> 

    <p> 
     Special Requests 
    </p> 
    <p> 
     <asp:TextBox ID="txtSpecialRequests" runat="server" Rows="4" TextMode="MultiLine" Width="250px"></asp:TextBox> 
    </p> 
    <h3>Contact Information</h3> 
    <p>Name: 
    </p> 

    <p> 
     <asp:TextBox ID="txtName" runat="server" Width="320px"></asp:TextBox> 
    </p> 
    <p> 
     Email 
    </p> 
    <p> 
     <asp:TextBox ID="txtEmail" runat="server" Width="320px"></asp:TextBox> 
    </p> 

    <asp:Button ID="btnSubmit" runat="server" Text="Submit" 
     Width="80px" PostBackUrl="~/ConfirmationPage.aspx" /> 
    &nbsp; 
    <asp:Button ID="btnClear" runat="server" Text="Clear" Width="80px" OnClick="btnClear_Click" /> 

    <p> 
     <asp:Button ID="btnInstert" runat="server" Text="Insert" OnClick="btnInstert_Click" Width="80px" /> 
    </p> 
    <p> 
     <asp:Label ID="lblMessage" runat="server" Text="Label"></asp:Label> 
    </p> 
</asp:Content> 
+0

Я думаю, что вы должны хранить значения в каком-либо сеансе или использовать Querystring для небольших фрагментов данных и просто использовать их на другой странице, а не использовать 'PreviousPage.FindControl'. –

ответ

1

Использование PreviousPage.FindControl() можно только PreviousPage доступ к данным, когда кто-то переходит из Page A —> Transfer Data —> Page B. Если вы запрашиваете страницу напрямую, тогда PreviousPage отображает нулевую ссылку.

Здесь В вашем случае после перехода на страницу Default2 вы сохраняете значение только при загрузке страницы. После того, как вы нажмете на свой звонок Default.aspx, и PreviousPage теряет данные. Также, как вы находите контроль неправильно, вы получите NULLREFERENCE.

Подробнее

Если шаблонной страницы в вашем веб-приложения, то один не может непосредственно получить доступ к предыдущему элементу управления страницы, просто позвонив по телефону PreviousPage.FindControl() один должны сначала найти ContentHolder управления, который обитал в главной странице, а затем можно найти дочерние элементы управления на дочерних веб-страницах.

Решение: -

Используйте IsPostBack свойство

как я могу получить значение DUE_DATE в JavaScript

public partial class Default2 : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      string numNights = Convert.ToString(((TextBox)PreviousPage.Master.FindControl("ContentPlaceHolder1").FindControl("txtNights")).Text); 
      string arrivalDate = Convert.ToString(((TextBox)PreviousPage.Master.FindControl("ContentPlaceHolder1").FindControl("txtArrivalDate")).Text); 
      string numAdults = Convert.ToString(((DropDownList)PreviousPage.Master.FindControl("ContentPlaceHolder1").FindControl("ddlAdults")).SelectedValue); 
      string numChildren = Convert.ToString(((DropDownList)PreviousPage.Master.FindControl("ContentPlaceHolder1").FindControl("ddlChildren")).SelectedValue); 
      string roomTypeBusiness = "false"; 
      string roomTypeSuite = "false"; 
      string roomTypeStandard = "false"; 
      string bedTypeKing = "false"; 
      string bedTypeDouble = "false"; 
      string smokingOption = "false"; 

      if (Convert.ToBoolean(((RadioButton)PreviousPage.Master.FindControl("ContentPlaceHolder1").FindControl("rdoBusiness")).Checked")) 
       roomTypeBusiness = "true"; 
      else if (Convert.ToBoolean(((RadioButton)PreviousPage.Master.FindControl("ContentPlaceHolder1").FindControl("rdoSuite")).Checked")) 
       roomTypeSuite = "true"; 
      else 
       roomTypeStandard = "true"; 

      if (Convert.ToBoolean(((RadioButton)PreviousPage.Master.FindControl("ContentPlaceHolder1").FindControl("rdoKing")).Checked)) 
       bedTypeKing = "true"; 
      else 
       bedTypeDouble = "true"; 

      string specialRequests = Convert.ToString(((TextBox)PreviousPage.Master.FindControl("ContentPlaceHolder1").FindControl("txtSpecialRequests")).Text); 
      string name = Convert.ToString(((TextBox)PreviousPage.Master.FindControl("ContentPlaceHolder1").FindControl("txtName")).Text); 
      string email = Convert.ToString(((TextBox)PreviousPage.Master.FindControl("ContentPlaceHolder1").FindControl("txtEmail")).Text); 

      /* Splitting data into newline */ 

      string info = String.Format("Arrival Date: {0}, Number of Nights: {1}, Number of Adults: {2}, Number of Children: {3}, Business Room: {4}, Suite Room: {5}, Standard Room: {6}, King Bed: {7}, Double Bed: {8}, Smoking: {9}, Special Requests: {10}, Name: {11}, E-mail: {12}", 
      arrivalDate, numNights, numAdults, numChildren, roomTypeBusiness, roomTypeSuite, roomTypeStandard, bedTypeKing, bedTypeDouble, smokingOption, specialRequests, name, email); 

      String[] tokens = info.Split(new[]{","}, StringSplitOptions.RemoveEmptyEntries); 
      lblResults.Text = string.Join("<br />", tokens);   
      } 
     } 
    } 
+0

Когда я пытаюсь это сделать, я получаю «Ошибка « System.Web.UI.Control »не содержит определения для« Текст »и никакого метода расширения« Текст », принимающего первый аргумент типа« System.Web. UI.Control '(вам не хватает директивы использования или ссылки на сборку?) « –

+0

@OptimusOmega: отредактированный код, пожалуйста, попробуйте. – Prabhat

+0

Когда я запускаю его таким образом, я получаю «Первое случайное исключение типа« System.NullReferenceException »произошло в App_Web_tbejxdai.dll« Оно указывает на значение строка numNights = Convert.ToString (((TextBox) PreviousPage.FindControl («txtNights»))).Текст); –

0

Ваш код не является правильным. Вы должны использовать ControlID, а затем бросить контроль, чтобы исправить тип, а затем использовать соответствующий properties.Also для списка вы должны использовать SelectedItem.Text вместо SelectedValue.Text

Ниже приведен модифицированный код

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class Default2 : System.Web.UI.Page 
{ 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      string numNights = Convert.ToString(((TextBox)PreviousPage.FindControl("txtNights")).Text); 
      string arrivalDate = Convert.ToString(((TextBox)PreviousPage.FindControl("txtArrivalDate")).Text); 

      string numAdults = Convert.ToString(((DropDownList)PreviousPage.FindControl("ddlAdults")).SelectedItem.Text); 
      string numChildren = Convert.ToString(((DropDownList)PreviousPage.FindControl("ddlChildren")).SelectedItem.Text); 
      string roomTypeBusiness = "false"; 
      string roomTypeSuite = "false"; 
      string roomTypeStandard = "false"; 
      string bedTypeKing = "false"; 
      string bedTypeDouble = "false"; 
      string smokingOption = "false"; 

      if (Convert.ToBoolean(((RadioButton)PreviousPage.FindControl("rdoBusiness")).Checked)) 
       roomTypeBusiness = "true"; 
      else if (Convert.ToBoolean(((RadioButton)PreviousPage.FindControl("rdoSuite")).Checked)) 
       roomTypeSuite = "true"; 
      else 
       roomTypeStandard = "true"; 

      if (Convert.ToBoolean(((RadioButton)PreviousPage.FindControl("rdoKing")).Checked)) 
       bedTypeKing = "true"; 
      else 
       bedTypeDouble = "true"; 

      string specialRequests = Convert.ToString(((TextBox)PreviousPage.FindControl("txtSpecialRequests")).Text); 
      string name = Convert.ToString(((TextBox)PreviousPage.FindControl("txtName")).Text); 
      string email = Convert.ToString(((TextBox)PreviousPage.FindControl("txtEmail")).Text); 

      lblResults.Text = String.Format("Arrival Date: {0} \r\n Number of Nights: {1} \n Number of Adults: \r {2} Number of Children: {3} Business Room: {4} Suite Room: {5} Standard Room: {6} King Bed: {7} Double Bed: {8} Smoking: {9} Special Requests: {10} Name: {11} E-mail: {12}", 
      arrivalDate, numNights, numAdults, numChildren, roomTypeBusiness, roomTypeSuite, roomTypeStandard, bedTypeKing, bedTypeDouble, smokingOption, specialRequests, name, email); 
     } 

} 
+0

Когда я пытаюсь это сделать, я получаю «Случайное исключение типа« Ошибка System.NullReferenceException »в App_Web_stp3fzm4.dll». Ошибка –

+0

. Свойство PreviousPage имеет значение только тогда, когда кто-то перемещается с другой страницы вашего приложения на эту страницу. А также убедитесь, что ViewState включен для обеих страниц. –

+0

Я запустил свой файл ReservationForm (который я обновил исходный вопрос для показа), и я заполняю всю информацию и нажимаю кнопку отправки, которая имеет PostBackUrl для моего ConfirmationPage.aspx. Где включить ViewState? –

Смежные вопросы