2012-08-30 73 views
2

HTML頁面爲什麼我的提交按鈕提交兩次?

<body> 
    <form id="form1" action="Default.aspx" method="post"> 
    <input runat="server" id="txtuser" type="text" /> 
    <input runat="server" id="txtpwd" type="password" /> 
    <input type="submit" value="Login"/> 
</form> 
</body> 

代碼隱藏

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     Login(); 
    } 
} 

private void Login() 
{ 
    if (checkUser(Request.Params["txtuser"],Request.Params["txtpwd"])) 
    { 
     Response.Redirect("Success.aspx");//if success 
    } 
} 

我開發一個網頁的舊手機版(如諾基亞N70)面臨的一個問題。當我提交我的用戶名和密碼,然後檢查用戶返回true重定向到一個新的頁面。但它不會重定向到success.aspx。所以我調試點Response.Redirect代碼,它可以停在那裏,我繼續運行成爲錯誤,因爲獲取用戶名&密碼爲空。然後我意識到它已經加載了兩次頁面。如何解決它?

+0

我認爲這是烏拉圭回合上checkUser方法問題 –

+0

你用表單身份驗證和成功頁面未被授權?您最好使用ASP.NET窗體身份驗證,如http://msdn.microsoft.com/en-us/library/ff647070.aspx – slfan

+0

您的HTML頁面是Default.aspx頁面? –

回答

3

你想登錄時,有一個回發。而不是相反。

變化

if (!Page.IsPostBack) 

if (Page.IsPostBack) 

確保您已在代碼前設置AutoEventWireup爲true:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"... 

否則的Page_Load永遠不會被解僱。

+0

sani如果Page.IsPostBack返回false我如何激發登錄功能? – user1511029

+0

輸入類型=「提交」也會觸發回傳。你答案的第一部分是正確的,但不是第二部分(即使我也使用服務器控件)。 – slfan

+0

@slfan:當然......早上太早......沒有咖啡......;) –

2

您應該使用窗體身份驗證以適當的方式,像解釋here

你應該爲你的重定向做這樣的事情:

if (checkUser(userName.Text, password.Text)) 
{ 
    FormsAuthentication.RedirectFromLoginPage(userName.Text, false); 
} 
+0

然後我如何重定向到我想要的路徑,如success.aspx – user1511029

+0

您導航到Success.aspx。如果你沒有登錄,你將被重定向到Login.aspx,在那裏你做checkUser。身份驗證Cookie將生成,以便您不必再次登錄。 – slfan