<%@ Page Language="C#" AutoEventWireup="true" CodeFile="back-login.aspx.cs" Inherits="back_login" %><%@ Register assembly="WebValidates" namespace="WebValidates" tagprefix="cc1" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>管理员登录</title>
    <style type="text/css">
        .style1
        {
            width: 449px;
            height: 286px;
</head>
//接下去就是文本框和按钮了。下面是我写的代码:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;public partial class back_login : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //TextBox1.Text=Session["userid"];
        if (!Page.IsPostBack)
        {
            do                SerialNumber1.Create();
            while (SerialNumber1.SN.Length != 4);
        }
       
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        if (Session["userid"] != null)
        {
            TextBox1.Text = Session["userid"].ToString();
            string uid, pwd;
            uid = TextBox1.Text;
            pwd = TextBox2.Text;            if (SerialNumber1.CheckSN(TextBox3.Text))
            {
                SqlConnection conn = new SqlConnection();
                conn.ConnectionString = ConfigurationManager.ConnectionStrings["euyar"].ToString();                try
                {
                    conn.Open();
                    SqlCommand cmd = new SqlCommand();
                    cmd.CommandText = "select zt from euyar where userid= ' " + uid + " ' and pass= '" + pwd + " '";
                    cmd.Connection = conn;
                    //int count = Convert.ToInt32(cmd.ExecuteReader());
                    SqlDataReader Permissions = cmd.ExecuteReader();
                    if (Convert.ToInt32(Permissions.GetString(0)) == 2)
                    {
                        //Session["userid"] = uid;
                        Response.Redirect("userupdata.aspx");                    }
                    else
                    {
                        RegisterStartupScript("", "<script language='javascript'>alert('用户名或密码不正确!');</script>");
                    }
                }
                catch (Exception ex)
                {
                    HttpContext.Current.Response.Write(ex.Message);
                }
                finally
                {
                    conn.Close();                }
            }
            else 
            {
                RegisterStartupScript("", "<script language='javascript'>alert('验证码错误!');</script>");
                do                    SerialNumber1.Create();
                while (SerialNumber1.SN.Length != 4);
            }        }
        else
        {
            RegisterStartupScript("", "<script language='javascript'>alert('登录超时,请重新登录!');</script>");
            Response.Redirect("login.aspx");
        }
    }
    protected void LinkButton1_Click(object sender, EventArgs e)
    {
        do            SerialNumber1.Create();
        while (SerialNumber1.SN.Length != 4);
    }
}
我的这个是一个登录界面。每次我输入完账号密码和验证码后,一点登录。就会报错,内容如下:使用 TreeView.HoverStyle 要求 Page.Header 非空(例如 <head runat="server" />)。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.InvalidOperationException: 使用 TreeView.HoverStyle 要求 Page.Header 非空(例如 <head runat="server" />)。源错误: 执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。  堆栈跟踪: 
[InvalidOperationException: 使用 TreeView.HoverStyle 要求 Page.Header 非空(例如 <head runat="server" />)。]
   System.Web.UI.WebControls.TreeView.EnsureRenderSettings() +1186759
   System.Web.UI.WebControls.TreeView.OnPreRender(EventArgs e) +59
   System.Web.UI.Control.PreRenderRecursiveInternal() +86
   System.Web.UI.Control.PreRenderRecursiveInternal() +170
   System.Web.UI.Control.PreRenderRecursiveInternal() +170
   System.Web.UI.Control.PreRenderRecursiveInternal() +170
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2041

解决方案 »

  1.   

    head 里的
    <style type="text/css">
    标记有开始没有结束。
      

  2.   

    那是因为我看style样式里的样式太多了,所以给删除掉了一些。我在想是不是顶部的<%@ Page Language="C#" AutoEventWireup="true" CodeFile="back-login.aspx.cs" Inherits="back_login" %><%@ Register assembly="WebValidates" namespace="WebValidates" tagprefix="cc1" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
    这些引起的?该怎么删好呢!我对这段不懂。
      

  3.   

    删除的时候,请保证标记的完整性。<head runat="server">
    <title>管理员登录</title>
    </head>根据错误信息,不应该是最上面几句话的问题,还是head的可能性大,把head改成上面的样子试一下。
      

  4.   


    简单的给你解释一下,这些是干什么的,1、@ Page定义 ASP.NET 页分析器和编译器使用的页特定(.aspx 文件)属性。
    CodeFile
    指定指向页引用的代码隐藏文件的路径。
    此属性与 Inherits 属性一起使用可以将代码隐藏源文件与网页相关联。此属性仅对编译的页有效。 
    2<%@ Register assembly="WebValidates" namespace="WebValidates" tagprefix="cc1" %>
    其中的每一个属性描述如下:tagprefix
    一个任意别名,它提供对包含指令的文件中所使用的标记的命名空间的短引用。namespace 正在注册的自定义控件的命名空间。 
    tagname 与类关联的任意别名。此属性只用于用户控件。 
    assembly 与 tagprefix 属性关联的命名空间所驻留的程序集。就是注册一个自定义控件。
    3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">DOCTYPE是Document Type(文档类型)的简写,在页面中,用来指定页面所使用的XHTML(或者HTML)的版本。要想制作符合标准的页面,一个必不可少的关键组成部分就是DOCTYPE声明。只有确定了一个正确的DOCTYPE,XHTML里的标识和CSS才能正常生效。就是定义符合的web标准。4、<html xmlns="http://www.w3.org/1999/xhtml">定义html文档的类型,也就和定义css标准是一个意思