【问题标题】:Asp button don't postback if如果 Asp 按钮不回发
【发布时间】:2016-09-27 17:57:46
【问题描述】:

我有一个登录框,由带有文本框的 jquery 制成,然后是一个 asp:button,用于验证和创建会话,就像在代码中一样。

当用户名和密码错误并单击 asp: 按钮时,我已经制作了一个标签,但由于回发,登录框消失了。

 protected void Button1_Click(object sender, EventArgs e)
{
   Connectons etc...
    cmd.CommandText = "SELECT * FROM Users WHERE Email = @email AND password = @pass";
    cmd.Parameters.Add("@email", SqlDbType.VarChar).Value = username.Text;
    cmd.Parameters.Add("@pass", SqlDbType.VarChar).Value = password.Text;
    conn.Open();
    SqlDataReader reader = cmd.ExecuteReader();
    if (reader.Read())
    {
        Session["user_id"] = reader["user_id"];
        Session["username"] = reader["Username"];
        Session["name"] = reader["Name"];
        Session["password"] = reader["Password"];
        Session["LoggedIn"] = true;
        Session["role"] = reader["Role_id"];
        if (Convert.ToInt32(reader["Role_id"]) == 1)
        {
   Response.Redirect("Admin/default.aspx");
        }

        else
        {
            Response.Redirect("default.aspx");
        }

    }

    else
    {

        Label1.Text = "Login is wrong";

    }

    conn.Close();


}

如果登录错误,如何使按钮不回发?

        <a id="modal_trigger" href="#modal" class="btn btn-default">Log ind</a>

    <div id="modal" class="popupContainer" style="display: none;"> </div>

         $("#modal_trigger").leanModal({
        top: 100,
        overlay: 0.6,
        closeButton: ".modal_close"
    });

【问题讨论】:

  • 由于您正在验证服务器上的登录,因此您不可能阻止回发(因为在单击按钮之前不会进行用户验证)。如果第一次登录不正确,您的意思是要禁用登录按钮以供以后尝试?
  • 另外 - 如果您要在关闭之前重定向,您希望将您的 conn(和您的 com)包装在 USING 中。
  • 如果您的意思是您不想在用户名或密码字段为空的情况下允许回发,那么您可以使用控制验证器。只需澄清您的要求,我们会提供帮助
  • 谢谢,这是有道理的。我只是希望我知道如何让 jquery 弹出框保持不变。
  • 首先是如何渲染的?

标签: c# asp.net button onclick


【解决方案1】:

您的问题不在于回发,而在于您使用的是预定义的登录框,该登录框仅在页面未处于回发状态时才会呈现。本质上,渲染代码假设每次登录都会成功。

要解决此问题,您需要找到创建预定义登录“框”的位置/时间/方式,并在“登录不正确”文本之后添加该行以重新创建它。

这样,如果第一次尝试失败,登录“框”将重新出现。

 if (Convert.ToInt32(reader["Role_id"]) == 1)
    {
        Response.Redirect("Admin/default.aspx");
    }

    else
    {
        Response.Redirect("default.aspx");
    }

}

else
{

    reDraw = true;
}

//this has page scope (outside all methods)
bool reDraw = false;

private void reDrawLogin(){
      Label1.Text = "Login is wrong";
    //re-render login box to allow for another try
    string myScript = "\n<script type=\"text/javascript\" language=\"Javascript\" id=\"EventScriptBlock\">\n";
    myScript += "style="display: block;visibility:visible"> 
    myScript += "\n\n </script>";
 Page.ClientScript.RegisterStartupScript(this.GetType(), "myKey", myScript, false);
 }

 //in your page_load, add:

 if(isPostBack){
    if(reDraw){
       reDrawLogin();
       reDraw=false;
    }
 }

并且不要在你的 CONN 和 COM 中预先使用 USING !!!祝你好运。

【讨论】:

  • 它不起作用。盒子还是消失了。但是谢谢,现在我至少知道要找出什么了。
  • 它可能被调用得太早了。我对我的答案进行了更改。希望对您有所帮助。
【解决方案2】:

在按钮属性中添加 AutoPostBack=False

注意:根据您的问题,尚不清楚您想要实现什么,但正如您询问如何将 autopostback 添加到 false ,所以我给出了上述答案。 如果您想在登录不正确的情况下阻止回发,那么这是不可能的,因为用户凭据的验证只有在单击按钮后才会发生。

【讨论】:

  • 根据你的问题不清楚然后确保你应该先使用 cmets 说清楚
【解决方案3】:

需要调用 Postback 才能到达您那里的代码。我相信您可以使用一些 ajax 来查询您的数据库 onClick 并在成功时导致回发。我没有例子。对不起。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-06
  • 2010-10-15
  • 2021-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-09
相关资源
最近更新 更多