Laden...

Page.Header hinzufügen und Controls und auslesen von InnerHtml nicht möglich?!

Erstellt von Inoir vor 11 Jahren Letzter Beitrag vor 11 Jahren 2.801 Views
I
Inoir Themenstarter:in
60 Beiträge seit 2011
vor 11 Jahren
Page.Header hinzufügen und Controls und auslesen von InnerHtml nicht möglich?!

Hey!!

Hab folgendes Problem:

Wenn ich ein script in ein Header einfüge, dann hab ich mir folgendes script erstellt:


        public static void SetScriptInHeader(string script, string scriptId, bool isFile, Page page)
        {            
            if (page != null)
            {
                System.Web.UI.HtmlControls.HtmlGenericControl js = new System.Web.UI.HtmlControls.HtmlGenericControl("script");
                js.Attributes.Add("type", "text/javascript");
                js.Attributes.Add("id", scriptId);

                System.Web.UI.HtmlControls.HtmlHead head = page.Header as System.Web.UI.HtmlControls.HtmlHead;

                if (head != null)
                {
                    if (isFile)                    
                        js.Attributes.Add("src", page.ResolveUrl(script));
                    else 
                        js.InnerHtml = script;

                    if (!ProofScriptIsAlreadyInHeader(head, js))
                        head.Controls.Add(js);
                }
                else
                    throw new NullReferenceException("Konnte 'Header' Objekt nicht in der aktuellen 'System.Web.UI.Page' finden!");
            }
            else            
                throw new NullReferenceException("Konnte 'Page' Objekt nicht im aktuellen 'System.Web.HttpContext.Current.Handler' finden!");            
        }

Problem ist nun, wenn ich an anderer Stelle Page.Header.InnerHtml auslesen will bzw etwas hinzufügen will bekomm ich die Meldung:
Innerer Inhalt von konnte nicht abgefragt werden, da der Inhalt nicht literal ist.

Komischerweise, hat das bis vor ner Woche prima funktioniert..
Hab seitdem von VS2010 auf 2012 gewechselt.. mehr nicht!
Kanns mir nicht so ganz erklären..

Grüße
Inoir

B
142 Beiträge seit 2007
vor 11 Jahren

Moin,

mit Visual Studio 2012 ist auch ASP.NET 4.5 gekommen.
Liegt hier evtl. das Problem?

Gruß
Björn

I
Inoir Themenstarter:in
60 Beiträge seit 2011
vor 11 Jahren

Hey!

Nein daran kanns eigentlich nicht liegen, da ich standartmäßig mit 3.5 arbeite und das Projekt auch noch auf 3.5 läuft!

5.942 Beiträge seit 2005
vor 11 Jahren

Hallo Inoir

Wie lautet der Fehler, ganz ausgeschrieben?

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

I
Inoir Themenstarter:in
60 Beiträge seit 2011
vor 11 Jahren
Innerer Inhalt von header konnte nicht abgefragt werden, da der Inhalt nicht literal ist.
Beschreibung: Unbehandelte Ausnahme beim Ausführen der aktuellen Webanforderung. Überprüfen Sie die Stapelüberwachung, um weitere Informationen über diesen Fehler anzuzeigen und festzustellen, wo der Fehler im Code verursacht wurde.

Ausnahmedetails: System.Web.HttpException: Innerer Inhalt von header konnte nicht abgefragt werden, da der Inhalt nicht literal ist.

Quellfehler:


Zeile 23:             catch(Exception ex)
Zeile 24:             {
Zeile 25:                 throw ex;
Zeile 26:             }


Quelldatei: c:\Users\***\Documents\Visual Studio 2012\Projects\TestProject\PictureViewerTest.aspx.cs    Zeile: 25

Stapelüberwachung:


[HttpException (0x80004005): Innerer Inhalt von header konnte nicht abgefragt werden, da der Inhalt nicht literal ist.]
   TestAnwendung._Default.Page_Load(Object sender, EventArgs e) in c:\Users\***\Documents\Visual Studio 2012\Projects\TestProject\PictureViewerTest.aspx.cs:25
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
   System.Web.UI.Control.OnLoad(EventArgs e) +99
   System.Web.UI.Control.LoadRecursive() +50
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627

I
Inoir Themenstarter:in
60 Beiträge seit 2011
vor 11 Jahren

Hab was merkwürdiges rausgefunden:

Wenn ich im HTML im <header>-Tag den <title>-Tag komplett rausnehme funktionert das ganze!

5.942 Beiträge seit 2005
vor 11 Jahren

Hallo Inoir

Wie sieht der Code aus, von dem aus die Exception fliegt?
Und wie sieht die ASPX-Seite aus, die Masterpage.

Schau mal hier:

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

I
Inoir Themenstarter:in
60 Beiträge seit 2011
vor 11 Jahren

Der Code war nur ein TestCode:


        protected void Page_Load(object sender, EventArgs e)        
        {
            var head = this.Page.Header;
            try
            {
                string s = head.InnerHtml;
            }
            catch(Exception ex)
            {
                throw ex;
            }
}

aspx sieht so aus:


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="PictureViewerTest.aspx.cs"
    Inherits="TestAnwendung._Default" %>

<%@ Register TagPrefix="Hsetu" Namespace="Hsetu.Controls" Assembly="Hsetu.Controls" %>
<!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" id="header">    
</head>
<body>
    <form id="form1" runat="server">
    <div style="width:500px; height:600px;">
        <Hsetu:Gallery runat="server" ID="Galerie" Width="100%" Height="400px" GalleryTitle="Galerie-Test" ImageResizeHandler="ImageResize.ashx" Enlarge="true" GalleryType="Minimal" PagerType="Click" DescriptionEnabled="true">
            <Pictures>
                <Hsetu:GalleryPicture Description="Hier kommt die Beschreibung ( Chrysanthemum )" ImageURL="Images/Chrysanthemum.jpg" TagString="Chrysanthemum" Name="Chrysanthemum" ToolTip="Chrysanthemum" />
            </Pictures>
        </Hsetu:Gallery>
        </div> 
    </form>
</body>

Alles nur testweise..
Der Fehler kommt vor dem Laden des Controls, dass da eingebunden wird!
Kann also damit nix zu tun haben..

Hab mir das auch schon durchgelesen, jedoch, wenn ich beim Head-Tag das runat="server" rausnehme, bekomm ich gar keinen Header mehr!

Funktioniert wie gesagt nur, wenn ich den Title-Tag rausnehme..