这是我登陆页面的代码: 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); }
<!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 }
}
如果出错了,就是GetClassName出错了。一步一步来。
如果GetClassName出错的,只有两个地方出错。要么是取数据阶段,但是这里会出黄页,不会一片空白。
那么就是Response.Write(ex)写出异常这里出错。这是有可能的,有可能写道某个标签里面去了,这时候可以通过查看页面源代码来看看是不是这样。一步一步的缩小范围,肯定可以解决的。
先跟进去IsAdmin()函数,看看里面的代码干了什么。肯定可以找到端倪的,然后按图索骥,就知道原因了。
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
}
}
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
}
}
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
}
}这是加密函数,我看不懂