2012-04-17 101 views
0

我第一次寫一些ASP.NET代碼,偶然發現了一個奇怪的錯誤。當我點擊按鈕發佈時,它是這樣做的,但沒有任何參數。ASP.NET post不起作用

代碼:

<%@ 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

你的按鈕點擊事件在哪裏? – 2012-04-17 08:33:33

+0

這是我第一次在ASP.NET中編寫,代碼不是我的。至於我的理解,如果沒有提供表單,ASP.NET會完成發佈到相同url的默認事件。 – Vadiklk 2012-04-17 08:34:44

回答

1

,當它被髮送到客戶端,以便在回發控制的變化ID的HttpContext最有可能沒有一個字段ID "Email"

試試這個:

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

我讀過另一個問題如何使用請求對象。它爲什麼在那裏工作? http://stackoverflow.com/questions/976613/get-post-data-in-c-asp-net – Vadiklk 2012-04-17 08:36:33

+0

,因爲你的控件具有'runat =「server」'這意味着服務器可以操縱控件並使用ViewState保持它的價值。您現在訪問該值的方式僅僅是通過引用控件本身,就您的「電子郵件」而言,並訪問其中的一個屬性,在您的情況下爲「文本」。你展示的例子使用的控件沒有'runat =「Server」'。 – Bazzz 2012-04-17 08:38:57

+0

只有當回到相同的頁面時,這個技巧才能起作用嗎? (我的意思是,如果我想將它發佈到另一個,我不應該使用Request對象嗎?)。 – Vadiklk 2012-04-17 08:43:39

1

我會檢查所有實際上發佈到頁面的字段,因爲我懷疑Email其實不是Email

在asp.net中,尤其是Master和Content Pages中,輸入的ID和名稱是動態更改的。

因此,電子郵件可能會變成類似ctl00_ContentPlaceHolder1_Email的東西。

說了這樣的話,你不應該需要使用Request對象來訪問發回到.net頁面的字段。您可以直接訪問這些值。

例如

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

只有當回到相同的頁面時,這個技巧纔會起作用嗎? (我的意思是,如果我想將它發佈到另一個,我不應該使用Request對象嗎?)。 – Vadiklk 2012-04-17 08:44:13

+0

是的,如果你發佈到另一個頁面,那麼你可以使用Request對象,但檢查它是Post時的字段名稱。 – 2012-04-17 09:40:42

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 2012-04-17 08:41:11

+0

@Vadiklk:你可以,但這不是一個好的做法,因爲你不是_handling_,而是_assuming_一個用戶操作,容易出錯,而且不是很清楚。這就是事件處理程序存在的原因。使用帶有!!IsPostBack檢查的Page_Load僅初始化您的默認表單。 – 2012-04-17 08:44:23

+0

那麼,這個活動會做什麼?它會宣佈「電子郵件」是我們收到的電子郵件。但是,它會重新加載頁面,讓這個函數決定如何處理髮布數據? – Vadiklk 2012-04-17 08:47:16