【问题标题】:Why my submit button submit twice?为什么我的提交按钮提交两次?
【发布时间】:2012-08-30 08:24:44
【问题描述】:

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 代码上调试点,它可以停在那里,我继续运行变成错误,因为让用户名和密码为空。然后我意识到它加载了两次页面。如何解决?

【问题讨论】:

  • 我认为这是您在 checkUser 方法上的问题
  • 您是否使用表单身份验证并且成功页面未授权?你最好使用 ASP.NET Forms Auth,就像这里解释的 msdn.microsoft.com/en-us/library/ff647070.aspx
  • 您的 HTML 页面是 Default.aspx 页面吗?

标签: c# asp.net html double-submit-problem


【解决方案1】:

您想在有回发时登录。反之亦然。

改变

if (!Page.IsPostBack)

if (Page.IsPostBack)

确保您已在 Code Front 中将 AutoEventWireup 设置为 true:

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

否则永远不会触发 Page_Load。

【讨论】:

  • sani 如果 Page.IsPostBack 返回 false 我如何触发登录功能?
  • an input type="submit" 也会触发回发。您的第一部分答案是正确的,但不是第二部分(即使我也会使用服务器控件)。
  • @slfan:当然……早上太早了……还没喝咖啡……;)
  • 对于带有标签 runat="server" 的提交按钮,我不知道为什么不能在旧的移动浏览器上工作。这就是为什么我不放在那里。
  • runat="server" 在服务器上执行。它与浏览器无关。在任何情况下,它都应该在浏览器上呈现输入 type="submit"。
【解决方案2】:

您应该以正确的方式使用表单身份验证,如 here 解释的那样

你应该为你的重定向做这样的事情:

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

【讨论】:

  • 然后我如何重定向到我想要的路径,比如success.aspx
  • 您导航到 Success.aspx。如果您没有登录,您将被重定向到 Login.aspx,您可以在其中执行您的 checkUser。将生成一个身份验证 cookie,这样您就不必再次登录。
猜你喜欢
  • 1970-01-01
  • 2015-10-27
  • 1970-01-01
  • 2012-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-22
  • 1970-01-01
相关资源
最近更新 更多