App_Code中定义基类Baseage
/// <summary>
///BasePage基类,检查用户是否登录
/// </summary>
public class BasePage : Page
{
    private SimpleUserInfo simpleUserInfo;    public SimpleUserInfo SimpleUserInfo
    {
        get {return simpleUserInfo;}
    }    public BasePage()
    {
        //在所有页面中利用页面加载事件统一身份验证
        Load += new EventHandler(BasePage_Load);
    }    protected void Page_PreInit(object sender, EventArgs e)
    {
        this.Theme = "SkinFileCN";
    }    /// <summary>
    /// 用户是否登陆判断
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    void BasePage_Load(object sender, EventArgs e)
    {
        //Session["SimpleUserInfo"]是在前台登录界面登录成功时设置的
        simpleUserInfo = Session["SimpleUserInfo"] as SimpleUserInfo;
        //如果用户没有登录则调转到登录页面
        if (simpleUserInfo == null)
        {
            string target = Request.Url.ToString();
            if (string.IsNullOrEmpty(target))
            {
                Response.Redirect("~/Login.aspx");
            }
            else
            {
                Response.Redirect("~/Login.aspx?target=" + Server.UrlEncode(target));
            }
        }
    }
}
在页面中调用
public partial class Login : BasePageLogin
{
    protected void Page_Load(object sender, EventArgs e)
    {
         ...
    }
}但是报错了
调试出错点
    protected void Page_PreInit(object sender, EventArgs e)
    {
        this.Theme = "SkinFileCN";
    }
运行完这段代码就出错了具体错误信息:控件包含代码块(即 <% ... %>),因此无法修改控件集合。 

解决方案 »

  1.   

    写错了一点在页面中调用
    public partial class Login : BasePage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
             ...
        }
    }但是报错了
    调试出错点
        protected void Page_PreInit(object sender, EventArgs e)
        {
            this.Theme = "SkinFileCN";
        }
    运行完这段代码就出错了具体错误信息:控件包含代码块(即 <% ... %>),因此无法修改控件集合。
      

  2.   

    命名真不规范。。
    this.Theme这是什么控件啊。。
      

  3.   

    应该不是页面错误,因为我把页面清空也有有同样提示
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Left.aspx.cs" Inherits="Login" %><!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>
        <script type="text/javascript">var imgpath='images/CN/';var expandall=false;var nowmenu=<%=intMenuIndex %>;</script>
        <script type="text/javascript" src="js/navbar.js"></script></head>
    <body>
        <form id="form1" runat="server">
        ...
        </form>
    </body>
    </html>
      

  4.   

    CodeFile="Left.aspx.cs" Inherits="Login" 
    是不是改过页面名字啦
      

  5.   

    CodeFile="Default.aspx.cs" Inherits="userControl_Default" %>
      

  6.   

    具体错误信息:控件包含代码块(即 <% ... %>),因此无法修改控件集合。
    那是你的皮肤里面有这个了?
    this.Theme=“”;这个Theme是皮肤?最多只是皮肤名。。
      

  7.   


    有了
    如果不要这句,不导入BasePage_Load就正常
    Load += new EventHandler(BasePage_Load);
      

  8.   

    this.Theme只能第一个执行,负责就会出错
      

  9.   


    Page_PreInit到底在什么时候运行?
      

  10.   

    PreInit事件这是ASP.NET 2.0引入的事件,它是页面生命周期的入口点。该事件被引发时,页面尚未与母版页和主题相关联。但页面滚动条位置已被恢复,被投递的数据变为可用,且所有的页面控件已被实例化,其属性也已基于在ASPX源中的默认值进行了设置(注意,如果没有在.aspx源中显式指定,这时的控件是没有ID的)。在这个阶段中,可以对母版页进行调换,或对主题进行编程。该事件仅对页面有效。IsCallback、IsCrossPagePostback和 IsPostBack会在这时被设置。   你跟踪一下了。
    这样试一下。  public BasePage()
        {
    this.Theme = "SkinFileCN";        //在所有页面中利用页面加载事件统一身份验证
            Load += new EventHandler(BasePage_Load);
        } 
      

  11.   

    调用页中的控件中前台用了<%= %>取值,改为用后台取值就可以了
      

  12.   

        <script type="text/javascript">var imgpath='images/CN/';var expandall=false;var nowmenu=<%=intMenuIndex %>;</script>
    可能是这行吧,改下试试
      

  13.   


    wwx6312388,我试了,去掉所有的<%=%>,就好了
    但是,如果把下边的代码去掉,那么有<%=%>也没有关系,不知道为什么?
    protected void Page_PreInit(object sender, EventArgs e)
        {
            this.Theme = "SkinFileCN";
        }
      

  14.   

    搞定
    把<head>中的js放到<head>之外就可以了
    但是很迷惑,为什么会这样呢?请求高手解答
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Left.aspx.cs" Inherits="Login" %><!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>
        <script type="text/javascript">var imgpath='images/CN/';var expandall=false;var nowmenu=<%=intMenuIndex %>;</script>
        <script type="text/javascript" src="js/navbar.js"></script>
    </head>    <script type="text/javascript">var imgpath='images/CN/';var expandall=false;var nowmenu=<%=intMenuIndex %>;</script>
        <script type="text/javascript" src="js/navbar.js"></script>
    <body>
        <form id="form1" runat="server">
        ...
        </form>
    </body>
    </html>
      

  15.   

     
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Left.aspx.cs" Inherits="Login" %><!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>
    </head><script type="text/javascript">var imgpath='images/CN/';var expandall=false;var nowmenu=<%=intMenuIndex %>;</script>
    <script type="text/javascript" src="js/navbar.js"></script>
    <body>
        <form id="form1" runat="server">
        ...
        </form>
    </body>
    </html>
      

  16.   

    <head runat="server">
    放在head之内,那就服务器端运行,所以就会出错
      

  17.   

    控件内部如果包含《%%》代码快的话,那么就服务在后台修改控件的内容
    因为你用了主题,所以在运行时期,head会去添加link元素,所以出现这个问题
    一般放body里面
      

  18.   

    不会吧,我原来是把js放在head外面的,会出错; 但是我把js放在head里面就没事了啊!