我需要自动将用户登录到将从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:
</td>
<td valign="middle" width="200">
<asp:TextBox ID="email" CssClass="loginpagefields" runat="server" size="25"></asp:TextBox>
</td>
</tr>
<tr>
<td class="logintext">
</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:
</td>
<td width="200" valign="middle">
<asp:TextBox ID="password" CssClass="loginpagefields" runat="server" size="25" TextMode="password"></asp:TextBox>
</td>
</tr>
<tr>
<td class="logintext">
</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>
</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">
</td>
</tr>
</table>
</form>
你的'form'标记是什么样的?你为什么要以单向方式('.elements [“email”]')和'password'字段以另一种方式('.password')访问'email'字段? – 2012-03-20 10:02:15
备注:这种方式存在**几个**回显电子邮件和密码的问题,特别是您以纯文本回显密码。另外,在JavaScript字符串文本中输出服务器端值时,必须确保输出的内容始终是字符串文本的有效内容。因为你的代码现在已经存在了,如果我的电子邮件地址或密码里有'''',脚本就会中断。同样,如果我在任何一个字段都有反斜杠(也许我使用的是密码“foo \ bar”),该字段将得到错误的值(因为字符串文字中的'\ b'是一个退格符)。 – 2012-03-20 10:06:42
我已经粘贴了上面的表单标记,并且我还使电子邮件与密码一致,但它没有区别。 – 2012-03-20 16:26:41