Avatar billede lajer Nybegynder
07. september 2004 - 00:31 Der er 5 kommentarer og
1 løsning

Panel bliver udskrevet som table i Moz, men som div i IE

Hej E.

Jeg har skrevet følgende klasse:

public class RenderColoumn : Control
{
    protected override void Render(HtmlTextWriter writer)
    {
        // Render the Top of the Coloumn
        Panel coloumnTop = new Panel();
        coloumnTop.CssClass = "ColoumnTop";
        coloumnTop.RenderBeginTag( writer );
        writer.Write("TOPIC");
        coloumnTop.RenderEndTag( writer );

        // Render the Content of the Coloumn
        Panel coloumnContent = new Panel();
        coloumnContent.CssClass = "ColoumnContent";
        coloumnContent.RenderBeginTag( writer );
        writer.Write("UUUUULA");
        coloumnContent.RenderEndTag( writer );

        base.Render (writer);
    }
}

Denne klasse adder jeg til en label, like so:

coloumnPanel.Controls.Add( new RenderColoumn() );


Og dette sker så x antal gange.

Mit problem er, at de Panels der bliver renderet i RenderColoumn klassen, bliver renderet som table's i Moz Firefox - men i IE bliver de fint renderet som div (som var hvad jeg forventede).

Kan dette virkelig passe?
Jeg kunne egentlig godt tænke mig at der kom div's ud til moz (og andre browsere for den sags skyld også).

Nogen der kan give en god grund til at der skulle være forskel på dette?

I følge mit hoved, så burde serverside kode slet ikke blande sig i hvilken klient der forespurgte siden.

På forhånd tak.
Avatar billede jepsen999 Nybegynder
07. september 2004 - 08:03 #1
Jeg har ikke stødt på problemet med div->table ,men har tidligere oplevet at den renderede kode var forskellig - specielt bliver alle valideringer lavet med postback i mozilla.

Hvis du åbner machine.config (findes i \WINDOWS\Microsoft.NET\Framework\v1.1.4322\CONFIG) kan du i sektionen "<browserCaps>" se hvordan de forskellige browsere får forskellig kode alt efter hvilken browser der åbner siden.

Problemet med div ser ud til at afhænge af hvilken tagwriter der bruges. Default bliver tagwriter sat til tagwriter=System.Web.UI.Html32TextWriter (øverst før alle filtre). For IE bliver den sat til tagwriter=System.Web.UI.HtmlTextWriter.

Jeg løste problemet (div->table) med mozilla 1.6 ved at indsætte "tagwriter=System.Web.UI.HtmlTextWriter" efter sektionen der starter med
<filter>
    <case match="Mozilla/(?'major'\d+)">
    <filter>
        <case match="[^0-3]" with="${major}">
        tagwriter=System.Web.UI.HtmlTextWriter

Jeg ved ikke om denne ændring giver problemer andre steder (f.eks. ved generering af javascript kode til valideringen), så du må hellere tage en backup før du piller for meget ved machine.config ;)
Avatar billede jepsen999 Nybegynder
07. september 2004 - 08:12 #2
Browsercaps-sektionen kan vist også skrives i web.config. Det gør det lidt lettere hvis siderne skal afvikles på et webhotel.

http://weblogs.asp.net/mrupp/archive/2003/04/03/4789.aspx
Avatar billede lajer Nybegynder
07. september 2004 - 13:47 #3
jepsen999:
Hmm okay. Det var da seriøst lidt af et .NET issue af de helt store, efter min mening. Puuuuha microsoft, puuuuha :-)

Jeg har ikke lige prøvet dit forslag endnu - og for også først tid til det iaften.

Men drop lige et svar - såfald at det virker, skal du få point :-)


Imellemtiden, hvis der er nogen der har en god forklaring på .NET's meget underlige (min mening) strategi, med at skrive forskellige client-side kode, så vil jeg meget gerne høre den.

// Torben Lajer
Avatar billede lajer Nybegynder
07. september 2004 - 16:30 #4
Det er hermed løst. Works like a charm.

Jeg valgte din nr.2 løsning, med at skrive i web.config, da siden skal ligge på et 3. parts webhotel.

Smid et svar ;-)

Og tak for hjælpen.

// Torben Lajer
Avatar billede jepsen999 Nybegynder
07. september 2004 - 17:33 #5
Tjaa, en lidt underlig strategi fra MS der lugter lidt af at de gerne vil favorisere IE. Men hvis du åbner machine.config kan du se at de fleste af de browsere der er beskrevet er mobile devices, og så bliver det måske lidt smart - da jeg tvivler på at alle mobile-device producenter lever op til HTML 4.0.

Det er skidt at en standard ikke bare bliver opfyldt, men det er da et lille plus at man kan konfigurere sig ud af det - og det ikke bare er kompileret ind i IIS'en.

En af kommentarerne i ovenstående link går iøvrigt på at vedligeholde at "browsercaps" ikke foretages af MS, men af et andet firma.
Avatar billede lajer Nybegynder
08. september 2004 - 18:24 #6
>> En af kommentarerne i ovenstående link går iøvrigt på at vedligeholde at "browsercaps" ikke foretages af MS, men af et andet firma.

Ja, det bed jeg også mærke i. Men, som der også står i den kommentar, så holder ikke helt. Microsoft har klart de resourcer der skal til for at vedligeholde browsercaps.

Lige ud over denne mindre detalje, så sparker .NET jo bagdel, så jeg er stadig glad og tilfreds ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester