发布重定向获取双提交预防的解决方案

时间:2013-03-30 19:44:00

标签: c# asp.net

我有一个register.aspx,它从用户那里获取一些信息并将其存储在数据库中。但是,当用户刷新页面时,我无法解决双重提交问题。这是我的registration.aspx文件:

<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,但它也无效。

2 个答案:

答案 0 :(得分:0)

我使用UpdatePanel和Template尝试了一种简单的方法:

更改主页中的代码,如下所示:

<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>

我认为这将以更简单的方式解决您的问题。 如果您有任何问题,请告诉我。

答案 1 :(得分:0)

请在TextBox和按钮控件中设置causevalidation =“false”

尝试以下代码

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