2012-04-17 6 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; 
     } 
    } 
} 

それが何らかの理由に、 "" Label9のテキストを変更します。まず、私は問題が私がtelerikをインストールしていないという事実にあると思ったので、私はそれをインストールしました。しかしそれは事を変えなかった。

+0

あなたのボタンのクリックイベントはどこですか? –

+0

これはASP.NETで初めて書いたもので、コードは私のものではありません。私が理解しているように、フォームが提供されていない場合、ASP.NETは同じURLにポストするデフォルトのイベントを完了します。 – Vadiklk

答えて

1

HttpContextが最も可能性の高いID "Email"とフィールドがありませんポストバックのように、それがクライアントに送信されるコントロールチェンジのID。

これを試してみてください:

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

別の質問で、Requestオブジェクトの使い方を読みました。なぜそれはそこで働くのですか?コントロールが 'runat =" server "'を持っているので、サーバーがコントロールを操作し、ViewStateを使用するため、http://stackoverflow.com/questions/976613/get-post-data-in-c-asp-net – Vadiklk

+0

価値を維持するあなたが今値にアクセスする方法は、あなた自身のケース「電子メール」を参照して、あなたのケースの「テキスト」のプロパティの1つにアクセスするだけです。表示する例では、 'runat =" Server "'を持たないコントロールを使用しています。 – Bazzz

+0

このトリックは、同じページに戻ってポストバックするときにのみ機能しますか? (私はそれを別のものに投稿したいのであれば、私はRequestオブジェクトを使ってはいけませんか?)。 – Vadiklk

1

Emailは実際にはEmailではないと思われるため、実際にページに投稿されているすべてのフィールドをチェックします。

特に、マスターページとコンテンツページでは、入力のIDと名前が動的に変更されます。

したがって、たとえばctl00_ContentPlaceHolder1_Emailのようになる可能性があります。

これを言って、Requestオブジェクトを使用して.netページにポストバックされたフィールドにアクセスする必要はありません。値に直接アクセスすることができます。

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

このトリックは、同じページに戻ってポストバックするときにのみ機能しますか? (私はそれを別のものに投稿したいのであれば、私はRequestオブジェクトを使ってはいけませんか?)。 – Vadiklk

+0

他のページに投稿している場合は、リクエストオブジェクトを使用できますが、投稿時のフィールド名を確認できます。 –

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:あなたはできますが、あなたは扱いが簡単ではありませんが、エラーが発生しやすく、あまりあまり明確でないユーザーアクションを考えているので、良い方法ではありません。そのため、イベントハンドラが存在します。 Page_Loadに '!IsPostBack'チェックを付けて、デフォルトのフォームだけを初期化してください。 –

+0

それでは、イベントはどうしますか? 「電子メール」を私たちが受け取った電子メールと宣言します。しかし、その後、ページをリロードして、この機能で投稿データの処理方法を決定させますか? – Vadiklk

関連する問題