2012-03-20 72 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:按钮不一定是一个“提交”按钮,它会呈现为执行操作的按钮。提交按钮执行表单的行动页。如果没有定义操作页面(您的示例中就是这种情况),则什么都不会发生。