2012-04-17 2 views
0

Впервые я пишу код ASP.NET и наткнулся на странную ошибку. Когда я нажимаю кнопку для публикации, она делает это, но без каких-либо параметров.Сообщение ASP.NET не работает

Код:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Login.aspx.cs" Inherits="SingTelAPI.Login" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server"> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
    <table style="width:100%;"> 
     <tr> 
      <td> 
       &nbsp;</td> 
      <td> 
       &nbsp;</td> 
      <td> 
       &nbsp;</td> 
     </tr> 
     <tr> 
      <td> 
       &nbsp;</td> 
      <td> 
       <table style="width:100%;"> 
        <tr> 
         <td> 
          &nbsp;</td> 
         <td align="center"> 
          <asp:Label ID="Label4" runat="server" Text="Login" Font-Bold="True" 
           Font-Names="Verdana" ForeColor="#CC0000" Font-Size="Large"></asp:Label> 
         </td> 
         <td> 
          &nbsp;</td> 
        </tr> 
        <tr> 
         <td> 
          &nbsp;</td> 
         <td> 
          &nbsp;</td> 
         <td> 
          &nbsp;</td> 
        </tr> 
        <tr> 
         <td> 
          &nbsp;</td> 
         <td> 
          <asp:Panel runat="server" DefaultButton="SubmitBtn" ID="Panel1"> 
           <table style="width:100%;"> 
            <tr> 
             <td class="style1"> 
              <asp:Label ID="Label9" runat="server" Font-Bold="True" Font-Names="Verdana" 
              ForeColor="#0066FF" Text="Inupt Details:"></asp:Label> 
             </td> 
             <td> 
             &nbsp;</td> 
             <td> 
             &nbsp;</td> 
            </tr> 
            <tr> 
             <td class="style1"> 
              <asp:Label ID="Label5" runat="server" Text="Email:"></asp:Label> 
             </td> 
             <td> 
              <telerik:RadTextBox ID="Email" runat="server" Skin="Default"> 
              </telerik:RadTextBox> 
             </td> 
             <td> 
              <asp:CustomValidator ID="EmailValidator" runat="server" 
              ErrorMessage="Please Enter Email" Font-Bold="True" Font-Names="Verdana" 
              ForeColor="#00CC66" ControlToValidate="Email" ValidateEmptyText="True" 
              ValidationGroup="LoginValidation"></asp:CustomValidator> 
             </td> 
            </tr> 
            <tr> 
             <td class="style1"> 
              <asp:Label ID="Label6" runat="server" Text="Password:"></asp:Label> 
             </td> 
             <td> 
              <telerik:RadTextBox ID="Password" Runat="server" Skin="Default"> 
              </telerik:RadTextBox> 
             </td> 
             <td> 
              <asp:CustomValidator ID="PasswordValidator" runat="server" 
               ControlToValidate="Password" ErrorMessage="Please Enter Password" Font-Bold="True" 
               Font-Names="Verdana" ForeColor="#00CC66" ValidateEmptyText="True" 
               ValidationGroup="LoginValidation"></asp:CustomValidator> 
             </td> 
            </tr> 
            <tr> 
             <td class="style1" colspan="3"> 
              <hr /></td> 
            </tr> 
            <tr> 
             <td class="style1"> 
              <telerik:RadButton ID="SubmitBtn" runat="server" 
               Skin="Default" Text="Login" ValidationGroup="LoginValidation" 
               Width="120px"> 
              </telerik:RadButton> 
             </td> 
             <td> 
              <asp:Label ID="ResultsLabel" runat="server" ForeColor="#339933"></asp:Label> 
             </td> 
             <td> 
              &nbsp;</td> 
            </tr> 
           </table> 
          </asp:Panel> 
         </td> 
         <td> 
          &nbsp;</td> 
        </tr> 
       </table> 
      </td> 
      <td> 
       &nbsp;</td> 
     </tr> 
     <tr> 
      <td> 
       &nbsp;</td> 
      <td> 
       &nbsp;</td> 
      <td> 
       &nbsp;</td> 
     </tr> 
    </table> 
</asp:Content> 

И файл .cs:

public partial class Login : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (IsPostBack) 
     { 
      string email = HttpContext.Current.Request["Email"]; 
      Label9.Text = email; 
     } 
    } 
} 

Он изменяет текст Метка9 на "" по какой-то причине. Сначала я думал, что проблема в том, что у меня не было telerik, поэтому я установил это. Но это ничего не изменило.

+0

Где находится событие нажатия кнопки? –

+0

Это первый раз, когда я пишу в ASP.NET, и код не мой. Насколько я понимаю, ASP.NET завершает событие по умолчанию для публикации на тот же URL-адрес, если форма не предоставляется. – Vadiklk

ответ

1

Идентификатор изменения управления, когда она направляется к клиенту так далее PostBack HttpContext, скорее всего, не имеет поле с идентификатором "Email".

Попробуйте это:

if (IsPostBack) 
{ 
string email = Email.Text; //Email refers to <telerik:RadTextBox ID="Email"/> 
Label9.Text = email; 
} 
+0

Я читал в другом вопросе, как использовать объект Request. Почему он там работает? http://stackoverflow.com/questions/976613/get-post-data-in-c-asp-net – Vadiklk

+0

, потому что ваш элемент управления имеет 'runat =" server ", что означает, что сервер может управлять элементом управления и использует ViewState для поддержания его ценности. Теперь вы можете получить доступ к этому значению, просто указав сам элемент управления, в вашем случае «Электронная почта» и получите доступ к одному из его свойств, в вашем случае «Текст». В примере, который вы показываете, используются элементы управления, которые не имеют 'runat =" Server ". – Bazzz

+0

Не будет ли этот трюк работать только при отправке обратно на ту же страницу? (Я имею в виду, если бы я опубликовал его на другой, не должен ли я использовать объект Request?). – Vadiklk

1

Я бы проверял все поля, которые на самом деле находятся на странице, поскольку я подозреваю, что Email на самом деле не Email.

В asp.net, особенно с страницами Master и Content, идентификаторы и имена для входов динамически изменяются.

Таким образом, электронная почта может стать чем-то вроде ctl00_ContentPlaceHolder1_Email.

Говоря об этом, вам не нужно использовать объект Request для доступа к полям, отправленным на страницу .net. Вы можете напрямую получить доступ к значениям.

например.

Label9.Text = this.Email.Text; 
+0

Не будет ли этот трюк работать только при отправке обратно на ту же страницу? (Я имею в виду, если бы я опубликовал его на другой, не должен ли я использовать объект Request?). – Vadiklk

+0

Да, если вы отправляете на другую страницу, то вы можете использовать объект Request, но проверьте, что такое имя поля, когда оно является Почтой. –

1

кажется, что вы не прикрепили обработчика событий вашей кнопки, поэтому изменить его на:

<telerik:RadButton ID="SubmitBtn" runat="server" Skin="Default" 
    OnClick="RadButton1_Click" Text="Login" ValidationGroup="LoginValidation" Width="120px"> 
</telerik:RadButton> 

и обрабатывать его в коде:

protected void RadButton1_Click(Object sender, EventArgs e) 
{ 
    String email = Email.Text; 
} 

Удалите деталь в Page_Load, поскольку она является избыточной.

+0

Нужно ли добавлять обработчик событий? Могу ли я отправить назад и использовать его в моей функции page_load? – Vadiklk

+0

@Vadiklk: Вы можете, но это не очень хорошая практика, так как вы не _handling_, а _assuming_ - действие пользователя, которое подвержено ошибкам и, кроме того, не очень понятно. Вот почему существует обработчик событий. Используйте Page_Load с '! IsPostBack'-check, чтобы инициализировать только свою форму по умолчанию. –

+0

Итак, что бы произошло на мероприятии? Он будет объявлять «электронное письмо» электронным письмом, которое мы получили. Но тогда он перезагрузит страницу и позволит этой функции решить, что делать с данными сообщения? – Vadiklk

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