使用主题css文件需要页面上的标题控件。 (例如)

时间:2010-05-06 18:41:19

标签: asp.net

我正在开发asp.net web项目。当我运行项目时,它正常工作。但在服务器中,我收到以下错误。如何解决这个问题?

Using themed css files requires a header control on the page. (e.g. `<head runat="server" />`).
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. How to solve this problem?

Exception Details: System.InvalidOperationException: Using themed css files requires a header control on the page. (e.g. `<head runat="server" />`).

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:
[InvalidOperationException: Using themed css files requires a header control on the page. (e.g. <head runat="server" />).]
   System.Web.UI.PageTheme.SetStyleSheet() +2458406
   System.Web.UI.Page.OnInit(EventArgs e) +8699420
   System.Web.UI.Control.InitRecursive(Control namingContainer) +333
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,  Boolean includeStagesAfterAsyncPoint) +378

7 个答案:

答案 0 :(得分:46)

我觉得如果页面不是为了呈现html,上面的答案都无法解决用户面临的实际问题。 在这种情况下,解决方案是 - 只需粘贴

EnableTheming = "False" StylesheetTheme="" Theme="" 

在该页面的@Page属性中。

例如,以下源代码示例:

<强> DownloadFile.aspx。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DownloadFile.aspx.cs"
    Inherits="WebUI.Monitorization.DownloadFile"  EnableTheming="False" StylesheetTheme="" Theme=""   %>

答案 1 :(得分:12)

您需要在页面(或母版页)中使用runat =“server”的头标记,如下所示

<head runat="server">
    <title></title>
</head>

答案 2 :(得分:3)

对我来说,原因是在上传之前我的pre-compile个网站上的实时服务器上缺少 PrecompiledApp.config 文件。

答案 3 :(得分:1)

确保在bin文件夹中只包含所需的文件。如果你有其他dll(旧版本的实际dll因其名称而异)可能会发生奇怪的事情。

答案 4 :(得分:0)

由于在Visual Studio 2008中出现了非常糟糕的复制和粘贴错误,我收到了此错误。我用一些代码片段替换了该页面,我本来打算发邮件给朋友。

尽管杀死了aspx页面的所有内容,但它没有引起任何其他错误。

答案 5 :(得分:0)

我想延长&#34; Suvendu Shekhar Giri&#34;的答案。 如果你有很多页面并不意味着渲染任何html,只是在流上写下它们的响应,即ajax调用。 将所有此类页面放在一个文件夹中,并在此文件夹中添加web.config。 在此web.config文件中添加以下标记

pages styleSheetTheme =&#34;&#34;主题=&#34;&#34;

希望这会有所帮助。

答案 6 :(得分:0)

我已经尝试了所有建议的事情而没有找到解决方案。

我只需要一个虚拟页面占位符,用于使用UserControl调用LoadControl。 我尝试将Theme和StyleSheetTheme设置为多个位置,因为System.Web.UI.Page具有此OnInit方法:

protected internal override void OnInit(EventArgs e) { 
    base.OnInit(e);

    if (_theme != null) { 
        _theme.SetStyleSheet();
    } 

    if (_styleSheet != null) {
        _styleSheet.SetStyleSheet();
    } 
}

我尝试在OnPreInit和OnInit中设置值但是这导致异常,说我不允许在那里设置这些属性。所以我尝试了这段代码,发现我的主题和StyleSheetTheme在OnInit中设置但不是OnPreInit:

public BaseRenderingPage()
{
    EnableTheming = false;
    Theme = null;
    StyleSheetTheme = null;
}

protected override void OnPreInit(EventArgs e)
{
    if (EnableTheming || Theme != null || StyleSheetTheme != null)
        throw new Exception("OnPreInit: " + EnableTheming + ", " + Theme + ", " + StyleSheetTheme);
    base.OnPreInit(e);
}   

protected override void OnInit(EventArgs e)
{
    if (EnableTheming || Theme != null || StyleSheetTheme != null)
        throw new Exception("OnInit: " + EnableTheming + ", " + Theme + ", " + StyleSheetTheme);
    base.OnInit(e);
}

我用这个黑客结束了解决它:

public override string Theme
{
    get { return null; }
    set { base.Theme = null; }
}

public override string StyleSheetTheme
{
    get { return null; }
    set { base.StyleSheetTheme = null; }
}