Asp.net 为什么我的logdiv在单击“登录”按钮后消失?

Asp.net 为什么我的logdiv在单击“登录”按钮后消失?,asp.net,Asp.net,我有一个div logdiv,它在单击登录按钮进行登录后出现。div中有一个名为signin button的按钮。当我单击登录按钮进行登录时,页面会重新加载,无论用户ID和密码是否匹配,它都会消失logdiv。我想保留它,直到密码和用户ID匹配为止 我的logdiv部分 <div id="logdiv" runat="server"> <p id="logidlabel">User ID</p> <asp:TextBox ru

我有一个div logdiv,它在单击登录按钮进行登录后出现。div中有一个名为signin button的按钮。当我单击登录按钮进行登录时,页面会重新加载,无论用户ID和密码是否匹配,它都会消失logdiv。我想保留它,直到密码和用户ID匹配为止

我的logdiv部分

<div id="logdiv" runat="server">
       <p id="logidlabel">User ID</p>
       <asp:TextBox runat="server" ID="logintext" CssClass="logusertext"></asp:TextBox>
        <p id="logpasslabel">Password</p>
        <asp:TextBox runat="server" ID="logpasstext" CssClass="logpasstext"    TextMode="Password"></asp:TextBox>
        <asp:Button runat="server" ID="signin" CssClass="signinbt" Text="Sign in" OnClick="signin_Click"/>
        <asp:Label ID="errorsignin" runat="server" Visible="False" ></asp:Label>   
    </div>

我不想在密码和用户ID不匹配之前消失logdiv…我正在从数据库获取密码和用户ID..数据库正在重新加载页面吗?

让我们先修复最严重的错误-代码中的错误。在执行此操作时,我们将检查
Read()
调用的结果,而不是依赖异常来告诉我们没有行,并使用块将一次性对象包装在

protected void signin_Click(object sender, EventArgs e)
{
    string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

    using (SqlConnection conn = new SqlConnection(connectionString))
    using (SqlCommand comm = new SqlCommand("SELECT password FROM usertable WHERE userid = @username", conn))
    {
        comm.Parameters.AddWithValue("@username", logintext.Text);

        conn.Open();

        using (SqlDataReader reader = comm.ExecuteReader())
        {
            if (reader.Read())
            {
                string password = reader.GetString(0);
                if (password == logpasstext.Text)
                {
                    iframestyle.Attributes["src"] = "userpage.aspx";
                }
                else
                {
                    errorsignin.Visible = true;
                    errorsignin.Text = "INVALID LOGIN";
                    logdiv.Attributes["style"] = "display:block;";
                }
            }
            else
            {
                errorsignin.Visible = true;
                errorsignin.Text = "INVALID LOGIN";
                logdiv.Attributes["style"] = "display:block;";
            }
        }
    }
}
编辑:要解决眼前的问题,您需要设置
样式
属性,而不是自定义
显示
属性

现在我们已经解决了这个问题,您需要重新考虑您的密码存储策略。以纯文本形式存储密码是一个极其糟糕的主意。您应该存储咸哈希。有关更多信息,请查看


最后,看起来你需要抓紧时间;我怀疑您当前的实现将允许未经身份验证的用户请求
userpage.aspx
,而无需先登录。

虽然不是解决方案,但为什么logpasstext.Text.ToString()?只是logpasstext有什么问题吗?text事实上,我想这没关系。我省略了这个,它也起作用了哦,孩子。。。你的网站只是另一个即将发生的安全漏洞。iframestyle??它是什么??我想这是造成问题的原因。当密码与pass2匹配时没问题。没有问题。我将它重定向到userpage。但是当它与登录div不匹配时,应该保留登录div。虽然我正在编写logdiv,但我不能这样做。attributes[“display”]=“block”,因为在我的css中它有display:none;我应用了这个..但是像我的代码一样,它正在更新,这意味着这个文本显示的是无效登录,但是logdiv正在消失..我不知道为什么???@setu:
div
正在消失,因为您添加了一个名为
display
的属性,其值为
block
。您需要将
style
属性的值设置为
display:block取而代之。我已经更新了我的答案。
protected void signin_Click(object sender, EventArgs e)
{
    string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

    using (SqlConnection conn = new SqlConnection(connectionString))
    using (SqlCommand comm = new SqlCommand("SELECT password FROM usertable WHERE userid = @username", conn))
    {
        comm.Parameters.AddWithValue("@username", logintext.Text);

        conn.Open();

        using (SqlDataReader reader = comm.ExecuteReader())
        {
            if (reader.Read())
            {
                string password = reader.GetString(0);
                if (password == logpasstext.Text)
                {
                    iframestyle.Attributes["src"] = "userpage.aspx";
                }
                else
                {
                    errorsignin.Visible = true;
                    errorsignin.Text = "INVALID LOGIN";
                    logdiv.Attributes["style"] = "display:block;";
                }
            }
            else
            {
                errorsignin.Visible = true;
                errorsignin.Text = "INVALID LOGIN";
                logdiv.Attributes["style"] = "display:block;";
            }
        }
    }
}