2012-03-20 123 views
0

我需要自動將用戶登錄到將從php網頁登錄的asp.net應用程序。我認爲這會很簡單,但在解決問題方面遇到問題。我設置了一個遠程測試頁面,提供一個emai和密碼到登錄頁面。在登錄頁面上,我添加了以下代碼 -使用javascript自動提交asp.net表單

<script runat="server"> 

void Page_Load(object sender, EventArgs e){ 

if (IsPostBack) { 
    // It is a postback 
} else { 
    // It is not a postback 

Session["email"]= Request.Form["email"]; 
Session["password"]= Request.Form["password"]; 
Page.ClientScript.RegisterStartupScript(Type.GetType("System.String"), "addScript", "submitForm()", true); 
} 

</script> 


<script type="text/javascript"> 
    function submitForm() { 
    document.forms["form1"].elements["email"].value = "<%= Session["email"] %>"; 
    document.forms["form1"].password.value = "<%= Session["password"] %>"; 
    document.forms["form1"].submit(); 
    } 
</script> 

如果我刪除document.forms [「form1」]。submit();行我被帶到登錄頁面,並且電子郵件和密碼被填充在適當的框中,如果我然後手動單擊提交按鈕我登錄。作爲測試,我然後只刪除document.forms [「form1」]。 password.value =「<%= Session [」password「]%>」;線,它似乎提交表單,因爲我得到一個驗證錯誤,說需要密碼(因爲我會提交登錄手動沒有密碼)

但是,因爲它站立,它需要我的登錄頁面,只有電子郵件是填充的,我假設電子郵件和密碼已發送,然後電子郵件已消失後,但不知道爲什麼會是這種情況(鑑於手動提交工程)我錯過了明顯的東西?

感謝

形式標記是 -

<form id="form1" runat="server"> 


    <table class="loginpanelouter" border="0" cellpadding="0" cellspacing="0" align="center"> 
     <tr> 
      <td class="loginlogo" colspan="2"> 
       <asp:Image ID="CMSLogo" runat="server" /> 
      </td> 
     </tr> 
     <tr> 
      <td class="logininvalid" colspan="2"> 
       <asp:Label ID="ErrorMessage" runat="server"></asp:Label> 
      </td> 
     </tr> 
     <tr> 
      <td class="loginforgot" colspan="2"> 
       <asp:LinkButton ID="ForgottenPassBtn" CausesValidation="false" runat="server">Forgotten Password?</asp:LinkButton> 
      </td> 
     </tr> 
     <tr> 
      <td class="logintext"> 
       Email:&nbsp;&nbsp; 
      </td> 
      <td valign="middle" width="200"> 
       <asp:TextBox ID="email" CssClass="loginpagefields" runat="server" size="25"></asp:TextBox> 
      </td> 
     </tr> 
     <tr> 
      <td class="logintext"> 
       &nbsp; 
      </td> 
      <td width="240" valign="middle"> 
       <asp:RegularExpressionValidator ID="emailValid" runat="server" ValidationExpression="[\w\.-]+(\+[\w-]*)[email protected]([\w-]+\.)+[\w-]+" 
        ErrorMessage="Please enter a valid email address." ControlToValidate="email" 
        EnableClientScript="False"></asp:RegularExpressionValidator> 
      </td> 
     </tr> 
     <tr> 
      <td class="logintext"> 
       Password:&nbsp;&nbsp; 
      </td> 
      <td width="200" valign="middle"> 
       <asp:TextBox ID="password" CssClass="loginpagefields" runat="server" size="25" TextMode="password"></asp:TextBox>&nbsp;&nbsp;&nbsp; 
      </td> 
     </tr> 
     <tr> 
      <td class="logintext"> 
       &nbsp; 
      </td> 
      <td width="240" valign="middle"> 
       <asp:RequiredFieldValidator ID="passwordRequired" runat="server" ErrorMessage="Please enter your Password" 
        Display="Static" ControlToValidate="password" EnableClientScript="False"></asp:RequiredFieldValidator> 
      </td> 
     </tr> 
     <tr> 
      <td colspan="2"> 
       <table> 
        <tr> 
         <td class="loginremeber"> 
          <asp:CheckBox ID="RememberLogin" runat="server" Text="Remember my sign in details" 
           ToolTip="Please select this box if you wish your sign in details to be remembered"> 
          </asp:CheckBox>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
         </td> 
         <td width="120px" valign="middle" align="right"> 
          <asp:Button ID="LoginBtn" runat="server" CssClass="buttonstyle" Text="Sign in" ToolTip="Please click to sign in"> 
          </asp:Button> 
         </td> 
        </tr> 
       </table> 
      </td> 
     </tr> 
     <tr> 
      <td colspan="2" height="35"> 
       &nbsp; 
      </td> 
     </tr> 
    </table> 
    </form> 
+0

你的'form'標記是什麼樣的?你爲什麼要以單向方式('.elements [「email」]')和'password'字段以另一種方式('.password')訪問'email'字段? – 2012-03-20 10:02:15

+0

備註:這種方式存在**幾個**回顯電子郵件和密碼的問題,特別是您以純文本回顯密碼。另外,在JavaScript字符串文本中輸出服務器端值時,必須確保輸出的內容始終是字符串文本的有效內容。因爲你的代碼現在已經存在了,如果我的電子郵件地址或密碼裏有'''',腳本就會中斷。同樣,如果我在任何一個字段都有反斜槓(也許我使用的是密碼「foo \ bar」),該字段將得到錯誤的值(因爲字符串文字中的'\ b'是一個退格符)。 – 2012-03-20 10:06:42

+0

我已經粘貼了上面的表單標記,並且我還使電子郵件與密碼一致,但它沒有區別。 – 2012-03-20 16:26:41

回答

4

我設法得到它的工作。 。

出於某種原因,並沒有一起工作 -

document.forms [ 「form1的」]提交(); 。

但改變這對 -

document.forms [ 「form1中」]的元素[ 「LoginBtn」]點擊();

現在讓我登錄。

1

它沒有提交的原因是因爲你沒有輸入類型=「提交」。一個asp:按鈕不一定是一個「提交」按鈕,它會呈現爲執行操作的按鈕。提交按鈕執行表單的行動頁。如果沒有定義操作頁面(您的示例中就是這種情況),則什麼都不會發生。