[ASP + DNN]Controls.Add exception

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • CRiMiNaL
  • Registratie: Mei 2002
  • Laatst online: 10-01-2024
Ik stoei al een paar dagen met het volgende probleem.

Ik heb een skin gemaakt voor DotNetNuke, maar omdat er wat CSS aanpassingen nodig zijn voor IE, zocht ik een manier om gebaseerd op browser additionele stylesheets toe te voegen voor IE6 en IE7.

De relevante code
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<script language="C#" runat="server">
protected void Page_Load(object sender, EventArgs e)
{
    string cssFixFile = null; 
    // Note, "Firefox", "Opera", "Netscape" can all be detected using this method.    
    if (Request.Browser.Browser.Equals("IE"))   
    {      
        // IE detected      //    
        if (Request.Browser.MajorVersion == 7) 
        {  
           // IE7 detected - create a full path to the skin_IE7.css file  
           cssFixFile = System.IO.Path.Combine(this.SkinPath, "skin_IE7.css");  
        }
        else if (Request.Browser.MajorVersion == 6)      
        { 
            // IE6 detected - create a full path to the skin_IE6.css file         
        }         
            cssFixFile = System.IO.Path.Combine(this.SkinPath, "skin_IE6.css");      

        // etc... more browser detection possible   
    }  

    // Load in the CSS file for the browser   
    if (cssFixFile != null)   
    {      
        // If a CSS file is needed, this part loads it in      
        HtmlGenericControl link = new HtmlGenericControl("LINK");      
        link.Attributes.Add("rel","stylesheet");      
        link.Attributes.Add("type","text/css");      
        link.Attributes.Add("href", cssFixFile );      
        Controls.Add(link);   
    }
}
</script>
<%@ Control language="C#" CodeBehind="index.ascx.cs" AutoEventWireup="true" Explicit="True" Inherits="DotNetNuke.UI.Skins.Skin" %>
<%@ Register TagPrefix="dnn" TagName="HOUSEMENU" Src="~/DesktopModules/HouseMenuSkinObject/HouseMenuSkinObject.ascx" %>
<%@ Register TagPrefix="dnn" TagName="HOUSEMENU4" Src="~/DesktopModules/HouseMenuSkinObject/HouseMenuSkinObject.ascx" %>
<%@ Register TagPrefix="dnn" TagName="HOUSEMENU2" Src="~/DesktopModules/HouseMenuSkinObject/HouseMenuSkinObject.ascx" %>
<%@ Register TagPrefix="dnn" TagName="HOUSEMENU3" Src="~/DesktopModules/HouseMenuSkinObject/HouseMenuSkinObject.ascx" %>
<%@ Register TagPrefix="dnn" TagName="COPYRIGHT" Src="~/Admin/Skins/Copyright.ascx" %>
<%@ Register TagPrefix="dnn" TagName="TERMS" Src="~/Admin/Skins/Terms.ascx" %>
<%@ Register TagPrefix="dnn" TagName="PRINTMODULE" Src="~/Admin/Containers/PrintModule.ascx" %>
<%@ Register TagPrefix="dnn" TagName="SEARCH" Src="~/Admin/Skins/Search.ascx" %>
<%@ Register TagPrefix="dnn" TagName="USER" Src="~/Admin/Skins/User.ascx" %>
<%@ Register TagPrefix="dnn" TagName="LOGIN" Src="~/Admin/Skins/Login.ascx" %>

Nu krijg ik hier de volgende exception op:
code:
1
2
3
DotNetNuke.Services.Exceptions.PageLoadException: 
The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>). ---> 
System.Web.HttpException: The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>). at System.Web.UI.ControlCollection.Add(Control child) at ASP.portals__default_skins_csv_index_ascx.Page_Load(Object sender, EventArgs e) in c:\DotNetNukeTest\Portals\_default\Skins\csv\index.ascx:line 31 at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) at System.Web.UI.Control.OnLoad(EventArgs e) at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) --- End of inner exception stack trace ---

Het gaat dus fout op regel 31, dit is waar de Controls.Add staat, maar hij klaagt dat er <% %> in de control zou staan, dit is niet zo, zoals je kan zien in de bovenstaande code, waarom krijg ik dan toch deze exception?

... MMORPG Addict.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik ben niet bekend met DNN maar is een conditional niet veel makkelijker?
HTML:
1
2
3
<!--[if lt IE 7]>
<link rel="stylesheet" type="text/css" href="/css/preie7fixes.css">
<![endif]-->

Zoiets. Dan ben je ook niet afhankelijk van server-side detectie van de browser (en dus foutgevoelig wegens vage useragent strings enzo)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • CRiMiNaL
  • Registratie: Mei 2002
  • Laatst online: 10-01-2024
Klopt, maar deze moet om het werkend te krijgen in de HEAD staan, en die kan ik nou net niet in de HTML aanpassen (AFAIK)
In de skin files geef je alleen de "body" van je skin op, dnn doet de rest.

... MMORPG Addict.


Acties:
  • 0 Henk 'm!

  • CRiMiNaL
  • Registratie: Mei 2002
  • Laatst online: 10-01-2024
Deze mag op slot, conditional statements werken wel buiten de head. Niet goed genoeg getest

... MMORPG Addict.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Een slotje is niet nodig op een topic als je je oplossing hebt. Zie daarvoor ook onze faq betreffende topiceinde. Wel zou het leuk zijn als je, ter naslag voor het nageslacht, even je oplossing post ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij