我在做ASP.Net网站时用C#语言编写,现在添加用户的页面上有一个“Button”按钮,下面是其“Button”的单击代码:    protected void Button1_Click(object sender, EventArgs e)
    {
        OleDbDataReader dr = db.ExecuteReader("SELECT * FROM w_user WHERE w_name='" + w_name.Text + "'");
        if (dr.Read())
        {
            Response.Write("<script>alert('用户名重复,请更换其他ID!')</script>");
        }
        else
        {
            string password = FormsAuthentication.HashPasswordForStoringInConfigFile(TextBox2.Text, "MD5");
            db.ExecuteNonQuery("INSERT INTO w_user (w_name,w_pass) VALUES ('" + w_name.Text + "','" + password + "')");
            Response.Write("<script>alert('添加成功!')</script>");//弹出提示信息
        }
        dr.Close();         Response.Redirect("admin_admin.aspx");
    }代码看似没有任何问题,当我单击按钮时,代码却并没有按照预期的执行。if语句似乎只是一个摆设,直接执行else里面的代码,奇怪吧?我这是添加用户的页面,比如说表里面已经有一个“admin”的用户,当我填写表单时故意将用户名填成“admin”,提交表单时应该提示“用户名重复……”才对,可是没有,代码直接跳过,执行else里面的插入数据库操作,最后跳转到admin_admin.aspx页面。
这让我很困惑,究竟是什么原因造成这种状况呢?后来,我无意中将Response.Redirect("admin_admin.aspx")这行代码删除时,却发现前面的代码执行就变得一切正常。这是否算C#语言的BUG呢?

解决方案 »

  1.   

    很常见的问题,alert没执行就被跳转掉了,改成:
    alert('用户名重复,请更换其他ID!');window.location='admin_admin.aspx';
    script>alert('添加成功!')</script>");window.location='admin_admin.aspx';删除Response.Redirect("admin_admin.aspx");这句。
      

  2.   

    你这个问题分太少了。这不是C#语言的BUG,而是你的代码有问题。输入重复的时候,把LZ的代码缩写一下,是这样的:Response.Write("<script>alert('用户名重复,请更换其他ID!')</script>");---以下称第一句。
    Response.Redirect("admin_admin.aspx");---以下称第二句。假如你的当前页面也是admin_admin.aspx;
    这两句在服务器上运行
    第一句把<script>alert('用户名重复,请更换其他ID!')</script>写入已经读入内存的admin_admin.aspx,客户端还没有收到这个文件。
    第二句重新从磁盘上读入admin_admin.aspx并发送到客户端。这里面不包括alert提示。执行过程是没有问题的,不可能出现“if语句似乎只是一个摆设,直接执行else里面的代码”,只不过是当前页面还没有显示出来就被你换了一个页面。好好了解一下前后台的关系,以及网页的传递过程。