-1

我制作了一个 Web 应用程序,我想为管理员登录 admincp,为管理员管理器登录 modcp。这是登录页面的代码:

protected void btnOk_Click(object sender, EventArgs e)
{
    try
    {
        string user_n = txtUser.Text;
        string pass_n = txtPass.Text;
        Int32 res = 0;


        DAL.DAL log = new DAL.DAL();
        res = log.login_user_form(user_n, pass_n);




        if (res == 1)
        { 

           if (user_n == "admin")
              {
                  Response.Redirect("manage/AdminPage.aspx");
              }
       else 
         {
            Response.Redirect("modcp/defult3.aspx");
        }


        }
        else
        {
            lblRes.Text = "error username or password";
        }
    }
    catch (Exception ex)
    {
        lblRes.Text = ex.ToString();
    }


}

在 DAL 层中,此代码:

public Int32 login_user_form(String username, String password)
{
    int res = 0;
    con = new SqlConnection(strcon);
    SqlCommand cmd = new SqlCommand("EXEC chek_user '" + username + "' , '" + password + "'", con);

    try
    {
        con.Open();
        if (cmd.ExecuteScalar() == null)
        {
            res = 0;
        }

        else
        {
            res = 1;
        }

        con.Close();

    }
    catch (SqlException)
    {
        throw;
    }

    return res;
}

这是我的存储过程:

@username nvarchar(50) , @password nvarchar(50)
AS
BEGIN

SET NOCOUNT ON;
    SELECT username_l1 , password_l1 
    FROM user_L1
    WHERE username_l1 = @username AND password_l1 = @password
END

页面 login.aspx 中的此代码在没有此行的情况下工作:

Response.Redirect("manage/AdminPage.aspx");

如果我清除此代码并编写:

txtPass.Visible = false;
lblRes.Text = "mesesege";

那是正确的工作,但没有Response.Redirect,不是吗?

(我不知道级别访问的工作方式)

4

1 回答 1

0

您应该将Response.Redirect()try/catch 移出,因为它实际上会引发异常。

即使代码在逻辑上是正确的,Response.Redirects也会被 catch 语句吞掉。

编辑:

这在这个问题中进行了解释。

于 2013-01-09T16:31:10.440 回答