我需要自動將用戶登錄到將從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