2013-03-30 32 views
1

我有一個register.aspx,它從用戶處獲取一些信息並將其存儲在數據庫中。但是,當用戶刷新頁面時,我無法解決雙提交問題。這裏是我的registration.aspx文件:Post重定向獲得雙重提交預防的解決方案

<form id="form1" runat="server"> 
    <asp:TextBox ID="txtUserName" runat="server"></asp:TextBox> 

    <asp:Button ID="btnRegister" runat="server" Text="Button" onclick="RegisterUser" /> 

    <asp:Label ID="lblErrorMessage" runat="server" Text=""></asp:Label> 
</form> 

這裏是registration.aspx.cs文件:

protected void RegisterUser(object sender, EventArgs e) 
{ 
    if (txtUserName.Text.Length < 3) 
    { 
     lblErrorMessage.Text = "username should be minimum 3 characters, try again."; 
    } 
} 

不過,我嘗試使用我的瀏覽器,Chrome瀏覽器測試。當我使用文本「a」作爲用戶名時,它會進入RegisterUser函數並顯示錯誤消息。但可悲的是,當我嘗試刷新頁面,它要求重新提交,而我所期待的,沒有任何問題刷新:

enter image description here

我嘗試使用Response.Redirect,它也不能工作。

+0

的'Response.Redirect'會所做的工作,你可能不正確地應用它。 – Aristos

+0

@Aristos,你能給出使用'Response.Redirect'的正確版本嗎? – Sait

+0

@zagy如果你想你可以在提交後重定向頁面。 但是,我認爲這是形式的常見行爲。您可以在許多網站上看到與gmail登錄頁面相同的表單行爲。 –

回答

0

我嘗試使用的UpdatePanel和模板你一個簡單的方法:

變化的代碼在你的主頁是這樣的:

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

    <asp:UpdatePanel runat="server"><ContentTemplate> 
    <asp:TextBox ID="txtUserName" runat="server"></asp:TextBox> 
    <asp:Button ID="btnRegister" runat="server" Text="Button" onclick="RegisterUser" /> 
    <asp:Label ID="lblErrorMessage" runat="server" Text=""></asp:Label> 
    <asp:ScriptManager ID="ScriptManager1" runat="server"> 
    </asp:ScriptManager> 
    </ContentTemplate> 
    </asp:UpdatePanel> 
</form> 

我認爲,這將在一個簡單的方法解決你的問題。 讓我知道你是否有任何問題。

+0

這是做這件事的「好方法」嗎? – Sait

+0

是的,但我們使用SSL作爲頁面(RegisteringUsers.aspx)。因爲它連接到數據庫。 – reaz

+0

,如果你想創建更安全的會話。這是另一個故事.. 你需要使用(SessionFacade)類。 – reaz

0

請設置的CausesValidation =「假」,在你的文本框和按鈕控制

的嘗試下面的代碼

<asp:TextBox ID="txtUserName" CausesValidation="false" runat="server"></asp:TextBox> 
     <asp:Button ID="btnRegister" CausesValidation="false" runat="server" Text="Button" onclick="RegisterUser" />