为什么运行后全是空白,也没有错误信息提示?谢谢!

解决方案 »

  1.   

    <%@ Page language="c#" Codebehind="AdminClassName.aspx.cs" AutoEventWireup="false" Inherits="news.NewsAdmin.AdminClassName" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <title>AdminClassName</title>
    <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
    <meta name="CODE_LANGUAGE" Content="C#">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    </HEAD>
    <body MS_POSITIONING="GridLayout">
    <form id="Form1" method="post" runat="server">
    <asp:Label ID="Label1" style="Z-INDEX:101; LEFT:24px; POSITION:absolute; TOP:16px" Runat="server"
    Width="80PX" Height="24px" ForeColor="red" Font-Bold="True">分类管理</asp:Label>
    <hr style="Z-INDEX:102; LEFT:24px; POSITION:absolute; TOP:40px" width="100%" size="1">
    <asp:Button ID="addclassname" style="Z-INDEX:103; LEFT:256px; POSITION:absolute; TOP:48px" Runat="server"
    Text="添加分类"></asp:Button>
    <hr style="Z-INDEX:104; LEFT:24px; POSITION:absolute; TOP:80px" width="100%" size="1">
    <asp:TextBox ID="classname" style="Z-INDEX:105; LEFT:32px; POSITION:absolute; TOP:48px" width="216px"
    Runat="server"></asp:TextBox>
    <asp:DataGrid id="DataGrid1" style="Z-INDEX: 106; LEFT: 24px; POSITION: absolute; TOP: 96px" runat="server"
    AutoGenerateColumns="False">
    <Columns>
    <asp:BoundColumn DataField="classid" ReadOnly="True" HeaderText="ID"></asp:BoundColumn>
    <asp:BoundColumn DataField="classname" HeaderText="分类名"></asp:BoundColumn>
    <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" HeaderText="编辑" CancelText="取消" EditText="编辑"></asp:EditCommandColumn>
    <asp:ButtonColumn Text="删除" HeaderText="删除" CommandName="Delete"></asp:ButtonColumn>
    </Columns>
    </asp:DataGrid>
    <asp:Label ID="info" style="Z-INDEX:107; LEFT:368px; POSITION:absolute; TOP:48px" Runat="server"
    Width="200PX" ForeColor="red"></asp:Label>
    </form>
    </body>
    </HTML>using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Data.SqlClient;namespace news.NewsAdmin
    {
    /// <summary>
    /// AdminClassName 的摘要说明。
    /// </summary>
    public class AdminClassName : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.Label Label1;
    protected System.Web.UI.WebControls.Button addclassname;
    protected System.Web.UI.WebControls.DataGrid DataGrid1;
    protected System.Web.UI.WebControls.Label info;
    protected System.Web.UI.WebControls.TextBox classname;

    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    Classes.CheckAdmin.IsAdmin();
    if(!Page.IsPostBack)
    {
    GetClassName();
    }
    } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.addclassname.Click += new System.EventHandler(this.addclassname_Click);
    this.DataGrid1.CancelCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_CancelCommand);
    this.DataGrid1.EditCommand+= new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_EditCommand);
    this.DataGrid1.UpdateCommand+= new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_UpdateCommand);
    this.DataGrid1.DeleteCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_DeleteCommand);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion
    #region
    private void addclassname_Click(object sender, System.EventArgs e)
    {
    this.info.Text="";
    if(this.classname.Text.Trim().Length!=0)
    {
    string sql=string.Format("insert into [ClassName] (classname) values ('{0}')",this.classname.Text.Trim());
    Classes.DataBase.ExcuteUpData(sql);
    GetClassName();
    }
    else
    {
    this.info.Text="数据不能为空!";
    }
    }
    #endregion #region
    private void GetClassName()
    {
    SqlConnection conn=null;
    string sql=string.Empty;
    DataSet ds=null;
    try
    {
    sql=string.Format("select * from [classname] order by classid desc");
    conn=Classes.DataBase.GetConn();
    SqlDataAdapter da=new SqlDataAdapter(sql,conn);
    ds=new DataSet();
    da.Fill(ds,"s");
    this.DataGrid1.DataSource=ds.Tables["s"];
    this.DataGrid1.DataBind();
    }
    catch(Exception ex)
    {
    Response.Write(ex);
    }
    finally
    {
    conn.Close();
    }
    }
    #endregion #region
    private void DataGrid1_EditCommand(object source,System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    this.DataGrid1.EditItemIndex=e.Item.ItemIndex;
    GetClassName();
    }
    #endregion #region
    private void DataGrid1_CancelCommand(object source,System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    this.DataGrid1.EditItemIndex=-1;
    GetClassName();
    }
    #endregion #region
    private void DataGrid1_UpdateCommand(object source,System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    TextBox ClassNameText=(TextBox)e.Item.Cells[1].Controls[0];
    string className=ClassNameText.Text;
    int classID=Int32.Parse((e.Item.Cells[0].Text).ToString());
    string sql=string.Format("update [classname] set classname='{0}' where classid={1}",className,classID);
    Classes.DataBase.ExcuteUpData(sql);
    this.DataGrid1.EditItemIndex=-1;
    GetClassName();
    }
    #endregion #region
    private void DataGrid1_DeleteCommand(object source,System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    int id=Convert.ToInt32(e.Item.Cells[0].Text);
    string sql=string.Format("delete from [ClassName] where classid={0}",id);
    Classes.DataBase.ExcuteUpData(sql);
    this.DataGrid1.EditItemIndex=-1;
    GetClassName();
    }
    #endregion }
    }
      

  2.   

    Classes.CheckAdmin.IsAdmin(); //这里注释掉看看会不会错。如果不出错,就是Classes.CheckAdmin.IsAdmin();出错
    如果出错了,就是GetClassName出错了。一步一步来。
      

  3.   

    然后看GetClassName,
    如果GetClassName出错的,只有两个地方出错。要么是取数据阶段,但是这里会出黄页,不会一片空白。
    那么就是Response.Write(ex)写出异常这里出错。这是有可能的,有可能写道某个标签里面去了,这时候可以通过查看页面源代码来看看是不是这样。一步一步的缩小范围,肯定可以解决的。
      

  4.   

    Haoze,谢谢你这么耐心。我想错误的原因是这样的:我项目名为news,它包含两个文件夹:Classes和NewsAdmin。而运行后空白的页面是在NewsAdmin里的,凡是用了Classes.CheckAdmin.IsAdmin();的页面都是空白,只有登陆页面没用它,能正常显示,所以我觉得问题在这儿。你觉得是这样吗?那我该怎么改呀?谢谢! 
      

  5.   

    那你就跟进去,看CheckAdmin干了什么事情。大概的猜测就是IsAdmin方法发现你不是Admin,就Response.Close()掉了。然后页面肯定就白了。
    先跟进去IsAdmin()函数,看看里面的代码干了什么。肯定可以找到端倪的,然后按图索骥,就知道原因了。
      

  6.   

    是,你说得太对了!“大概的猜测就是IsAdmin方法发现你不是Admin”,它就是觉得我不是管理员。因为我还没告诉我得另一个问题:登陆页面很正常,但我无论是用数据库sql里的用户登陆,还是用Admin表里的用户登陆,它都提示我用户名或密码错误。看来这两个问题联起来了,很有意思,是吧?那为什么我登陆会有错呢?
    using System;namespace news.Classes
    {
    /// <summary>
    /// CheckAdmin 的摘要说明。
    /// </summary>
    public class CheckAdmin
    {
    /// <summary>
    /// 
    /// </summary>
    #region
    public static void IsAdmin()
    {
    string adminuser=string.Empty;
    try
    {
    adminuser=System.Web.HttpContext.Current.Session["adminuser"].ToString();
    }
    catch
    {
    adminuser=string.Empty;
    }
    if(adminuser.Trim().Length==0)
    {
    System.Web.HttpContext.Current.Response.Write("<script>top.location.herf='Login.aspx';</script>");
    System.Web.HttpContext.Current.Response.End();
    }
    }
    #endregion
    }
    }
      

  7.   

    这是我登陆页面的代码:
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Data.SqlClient;namespace news.NewsAdmin
    {
    /// <summary>
    /// Login 的摘要说明。
    /// </summary>
    public class Login : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.Label Label1;
    protected System.Web.UI.WebControls.TextBox password;
    protected System.Web.UI.WebControls.Label Label2;
    protected System.Web.UI.WebControls.TextBox adminuser;
    protected System.Web.UI.WebControls.Button enter;
    protected System.Web.UI.WebControls.Label Label3;
    protected System.Web.UI.WebControls.Label info;

    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.Load += new System.EventHandler(this.Page_Load);
    this.enter.Click+=new System.EventHandler(this.enter_Click); }
    #endregion
    /// <summary>
    /// 
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    #region
    private void enter_Click(object sender,System.EventArgs e)
    {
    if(adminuser.Text.Trim().Length==0||password.Text.Trim().Length==0)
    {
    info.Text="你所填的用户名或密码为空,登陆失败!";
    }
    else
    {
    if(CheckAdmin(adminuser.Text.Trim(),password.Text.Trim()))
    {
    SaveStatus(adminuser.Text.Trim().ToString());
    Response.Redirect("index.aspx");
    }
    else
    {
    info.Text="你所填的用户名或密码错误,登陆失败!";
    }
    }
    }
    #endregion
    /// <summary>
    /// 
    /// </summary>
    /// <param name="adminuser"></param>
    #region
    private void SaveStatus(string adminuser)
    {
    Session["adminuser"]=adminuser;
    }
    #endregion
    /// <summary>
    /// 
    /// </summary>
    /// <param name="adminuser"></param>
    /// <param name="password"></param>
    /// <returns></returns>
    #region
    private bool CheckAdmin(string adminuser,string password)
    {
    bool yes=false;
    password=Classes.Md5.GetMD5(password.Trim());
    SqlConnection conn=null;
    SqlCommand cmd=null;
    SqlDataReader dr=null;
    string sql=string.Empty;
    try
    {
    sql=string.Format("select password from [Admin] where adminuser='{0}'",adminuser);
    conn=Classes.DataBase.GetConn();
    conn.Open();
    cmd=new SqlCommand(sql,conn);
    dr=cmd.ExecuteReader();
    if(dr.Read())
    {
    if(dr.GetString(0).Trim().Equals(password))
    yes=true;
    }
    }
    catch(Exception ex)
    {
    Response.Write(ex.Message);
    }
    finally
    {
    if(conn!=null)
    conn.Close();
    if(cmd!=null)
    cmd.Dispose();
    if(dr!=null)
    dr.Close();
    }
    return yes;
    }
    #endregion

    }
    }
      

  8.   

    你要用数据库里面的Admin账户登录。他的密码用Md5加密了的,所以你必须知道原始密码,你才能登录啊。用数据库的sa登录没用的。不过你可以自己写个123456,然后用md5吧123456加密,然后insert到数据库的管理员列表里面,就可以登陆了。
      

  9.   

    using System;
    using System.IO;
    using System.Collections;
    using System.Security.Cryptography;
    using System.Text;namespace news.Classes
    {
    /// <summary>
    /// Md5 的摘要说明。
    /// </summary>
    public class Md5
    {
    /// <summary>
    /// 
    /// </summary>
    /// <param name="s"></param>
    /// <returns></returns>
    #region
    public static string GetMD5(string s)
    {
    byte[] md5Bytes=Encoding.Default.GetBytes(s);
    MD5 md5=new MD5CryptoServiceProvider();
    byte[] cryptString=md5.ComputeHash(md5Bytes);
    int len;
    string temp=String.Empty;
    len=cryptString.Length;
    for(int i=0;i<len;i++)
    {
    temp+=cryptString[i].ToString("X2");
    }
    return temp.Substring(8,16).ToLower();
    }
    #endregion
    }
    }这是加密函数,我看不懂