webForumDet fria alternativet

XhtmlStrictFilter och autopostback

14 svar · 548 visningar · startad av Daniel78

Daniel78Medlem sedan jan. 2001200 inlägg
#1

Hej, har en fråga angående det XHTMLStrictFilter som finns här på webforum. När man använder det så slutar mina DropDowns med AutoPostBack att fungera. Någon som har ett workaround på detta, vill ogärna göra mig av med filtret men sidorna är obrukbara om det inte går att köra någon form av autopostback på mina DropDowns? :q

icaaqMedlem sedan okt. 20005 273 inlägg
#2

Vad får du för felmedelande?

mv icaaq

Daniel78Medlem sedan jan. 2001200 inlägg
#3

Jag får inget felmeddelande utan det är bara det att DropDownen postar inte det valda värdet längre. Det är precis som att AutoPostBack inte fungerar längre när man använder filtret. :(

Filtret tar ju b la bort Name attributet från Form taggen och jag vet inte om det är något sådant som orsakar detta. Men då borde ju de som ev använder detta filter ha reagerat tidigare, eller så är det inte så många som bryr sig om att validera sina sidor? :q

MVH
Daniel

Daniel78Medlem sedan jan. 2001200 inlägg
#4

Är det ingen som validerar sina ASP.NET sidor mot W3C standarden på detta forum? :q

MVH
Daniel

GladhMedlem sedan maj 20012 812 inlägg
#5

Jag får inget felmeddelande utan det är bara det att DropDownen postar inte det valda värdet längre. Det är precis som att AutoPostBack inte fungerar längre när man använder filtret

Jag läste någonstans att om man skapar egna servercontroller och vill få postbacken att funger så måste man ge kontrollen ett uniktnamn på Name-attribute.

Om man tog bort Name-attributet så fungerade inte postback, så det stämmer ju bra med dina "erfarenheter".

Är det ingen som validerar sina ASP.NET sidor mot W3C standarden på detta forum?

Inte jag! :)

- Magnus

Daniel78Medlem sedan jan. 2001200 inlägg
#6

Jag får väl lägga ner mitt arbete med att få denna specifika sida, som använder en DropDown med AutoPostback, att bli validerad XHTML. Jag som ville vara duktig... :stud

MVH
Daniel :birp

icaaqMedlem sedan okt. 20005 273 inlägg
#7

Jag gör det.... men jag använder inte autopostbacks. ;)

mv icaaq

icaaqMedlem sedan okt. 20005 273 inlägg
#8

jag har suttit och lekt lite med detta filter.
OBESERVERA att detta filter kan innehålla buggar.

[red]
/*
* Written by Mark Pasternak, [email]mark.pasternak@universum.se[/email]
* Feel free to modify
*/
using System;
using System.IO;
using System.Text.RegularExpressions;

namespace NineteenDecember
{
	/// <summary>
	/// Response Filter that modifies the ASP.NET output so it can validate against the XHTML 1.1 Strict standard.
	/// Two things are modified:
	/// 1. The form name attribute is removed. Warning, this may break JavaScript code!
	/// 2. The viewstate is wrapped in a div element.
	/// </summary>
	public class XHTMLStrictFilter : Stream
	{
		private Stream _sink;
		private long _position;

		private static Regex _regForm = new Regex("<form .*name=.* .*>", RegexOptions.Compiled|RegexOptions.IgnoreCase);
		private static Regex _regNameReplace = new Regex("name=[^ ]*", RegexOptions.Compiled|RegexOptions.IgnoreCase);
		private static Regex _regViewState = new Regex("<input type=\"hidden\" name=\"__VIEWSTATE\" value=\".*\" />", RegexOptions.Compiled|RegexOptions.IgnoreCase);
		// Tillagd 2004-02-11. Tar bort alla border="0"
		private static Regex _regBorder = new Regex("border=[^ ]*", RegexOptions.Compiled|RegexOptions.IgnoreCase);
		// Tillagd 2004-03-03. Byter language="javascript" till type="text/javascript"
		private static Regex _regType = new Regex("language=\"javascript\"", RegexOptions.Compiled|RegexOptions.IgnoreCase);
		// Tillagd 2004-03-03. fixar namnet på formuläret.
		private static Regex _regForm1 = new Regex("document.Form1", RegexOptions.Compiled|RegexOptions.IgnoreCase);

		private bool _formFix;
		private bool _viewStateFix;
		private bool _borderFix;
		private bool _typeFix;
		private bool _form1Fix;

		public XHTMLStrictFilter(Stream sink)
		{
			_sink = sink;
		}

		// The following members of Stream must be overriden.
		public override bool CanRead
		{
			get { return true; }
		}

		public override bool CanSeek
		{
			get { return true; }
		}

		public override bool CanWrite
		{
			get { return true; }
		}

		public override long Length
		{
			get { return 0; }
		}

		public override long Position
		{
			get { return _position; }
			set { _position = value; }
		}

		public override long Seek(long offset, System.IO.SeekOrigin direction)
		{
			return _sink.Seek(offset, direction);
		}

		public override void SetLength(long length)
		{
			_sink.SetLength(length);
		}

		public override void Close()
		{
			_sink.Close();
		}

		public override void Flush()
		{
			_sink.Flush();
		}

		public override int Read(byte[] buffer, int offset, int count)
		{
			return _sink.Read(buffer, offset, count);
		}

		// The Write method actually does the filtering.
		public override void Write(byte[] buffer, int offset, int count)
		{
			byte[] data;

			if(!_formFix || !_viewStateFix || !_borderFix || !this._typeFix || !this._form1Fix)
			{
				//string htmlOutput = System.Text.UTF8Encoding.UTF8.GetString(buffer);
				string htmlOutput = System.Text.Encoding.GetEncoding("iso-8859-1").GetString(buffer);
				int length = htmlOutput.Length;
				if(!_formFix && _regForm.IsMatch(htmlOutput))
				{
					string formMatch=_regForm.Match(htmlOutput).Value;
					
					// *** Borttagen 03-06-17 ***
					// *** htmlOutput=Regex.Replace(htmlOutput, formMatch, _regNameReplace.Replace(formMatch, ""), RegexOptions.IgnoreCase);
					htmlOutput=Regex.Replace(htmlOutput, _regNameReplace.Match(formMatch).Value,"", RegexOptions.IgnoreCase);
					_formFix=true;
				}
				if(!_viewStateFix && _regViewState.IsMatch(htmlOutput))
				{
					string viewStateMatch=_regViewState.Match(htmlOutput).Value;
					htmlOutput=Regex.Replace(htmlOutput, "<input type=\"hidden\" name=\"__VIEWSTATE\" value=\".*\" />", "<div>"+viewStateMatch+"</div>", RegexOptions.IgnoreCase); 
					_viewStateFix=true;
				}
				// Tillagd 2004-02-11. Tar bort alla border="0"
				if(!_borderFix && _regBorder.IsMatch(htmlOutput))
				{
					string formMatch=_regBorder.Match(htmlOutput).Value;
					htmlOutput=Regex.Replace(htmlOutput, _regBorder.Match(formMatch).Value,"", RegexOptions.IgnoreCase);
					_borderFix=true;
				}
				if(!this._typeFix && _regType.IsMatch(htmlOutput))
				{
					string formMatch=_regType.Match(htmlOutput).Value;
					htmlOutput=Regex.Replace(htmlOutput, _regType.Match(formMatch).Value,"type=\"text/javascript\"", RegexOptions.IgnoreCase);
					this._typeFix=true;
				}
				if(!this._form1Fix && _regForm1.IsMatch(htmlOutput))
				{
					string formMatch=_regForm1.Match(htmlOutput).Value;
					htmlOutput=Regex.Replace(htmlOutput, _regForm1.Match(formMatch).Value,"document.forms[0]", RegexOptions.IgnoreCase);
					this._form1Fix=true;
				}
				//data = System.Text.UTF8Encoding.UTF8.GetBytes(htmlOutput);
				data = System.Text.Encoding.GetEncoding("iso-8859-1").GetBytes(htmlOutput);
				count -= length - htmlOutput.Length;
			}
			else
			{
				data = new byte[count];
				Buffer.BlockCopy(buffer, offset, data, 0, count);
			}
			_sink.Write(data, 0, count);
		}
	}
}
[/red]

Det jag har gjort är att jag bytt ut language="javascript" till Type. Sen har jag fixat autopostbakcksen (tror jag).

Någon kan väl testa ;)

mv icaaq

Daniel78Medlem sedan jan. 2001200 inlägg
#9

Jag har kört med din uppdaterade kod nu och AutoPostBack fungerar nu på en av mina DropDown's som jag testat på! Tack för denna! :birp

asmodieMedlem sedan jan. 2004501 inlägg
#10

Fattar inte varför man vill validera...
Så länge det funkar i de vanligaste webläsarna så spelar det faktiskt ingen som helst roll...

Web-TorMedlem sedan nov. 200013 890 inlägg
#11

Det spelar en väldig roll.

• Du vet inte hur framtidens webbläsare ser ut.
• Du kan inte kontrollera sidan i alla webbläsare.
• Förhoppningsvis har kunden krav på att sidan ska följa en viss standard.
• Det är dessutom ett bra sätt att visa att man kan HTML.

Om du låter en byggfirma bygga ett hus åt dig och det är snett och skevt och taket är dåligt fastspikat; nöjer du dig då med att byggaren säger:
-"Men det går ju att bo här?"
Bygget måste väl även följa gällande byggregler? ;)

PaceMedlem sedan juni 20019 024 inlägg
#12

Web-Tor skrev:

Om du låter en byggfirma bygga ett hus åt dig och det är snett och skevt och taket är dåligt fastspikat; nöjer du dig då med att byggaren säger:
-"Men det går ju att bo här?"
Bygget måste väl även följa gällande byggregler? ;)

Håller med till punkt och pricka, men en liten parentes i ämnet är att byggfirman inte autogenererar fönster och dörrar som en webbserverkontroll gör. ;)

asmodieMedlem sedan jan. 2004501 inlägg
#13

Nej jag håller inte riktigt med.
Ja självklart ska byggkillarna bygga efter en viss standard. Men standarden bygger jue inte på ett par färdiga regler som valideringen gör. Utan den ska klara av vissa saker. Hur man löser det är en annan fråga.

Menar så länge huset är isolerat, rören inte läcker och elen är dragen på rätt sätt har du ett fungerande hus.

Men men...jag tycker fortfarande att validering är lite att ta i.

Nej man kan inte testa det i alla webbläsare som finns. Men man kan med enkla medel täcka upp ca 99%.

En sak vi kan vara rätt så säkra på är att framtidens webbläsare kommer att vara bakåtkompatibla.

Om kunden ska ha ett krav så ska det vara att den funkar för de stora webbläsarna. Inte att den följer en standard. För standarden funkar inte heller fullt ut på alla webbläsare idag.

Web-TorMedlem sedan nov. 200013 890 inlägg
#14

En sak vi kan vara rätt så säkra på är att framtidens webbläsare kommer att vara bakåtkompatibla.

Ja, de ska klara av äldre HTML-standarder.
Netscape 6 stöder inte allt som Netscape 4 gjorde. Däremot stödjer Netscape 6 HTML-standarden.

Men standarden bygger jue inte på ett par färdiga regler som valideringen gör. Utan den ska klara av vissa saker. Hur man löser det är en annan fråga.

På samma sätt talar inte HTML-standarden om hur din webbsida ska se ut, inte heller hur du ska lösa det. Däremot talar den om vad som är tillåtet och vad som inte är tillåtet.
När webbsidan är klar ska den valideras. Innan du får flytta in i huset ska det besiktigas.

Om kunden ska ha ett krav så ska det vara att den funkar för de stora webbläsarna.

Men det är ju inte webbutvecklaren som bestämmer vad kunden har för krav. Det finns EU-direktiv som säger att myndigheter och liknande ska uppfylla vissa WAI-krav. Där ingår bland annat att koden ska följa HTML-standarden.

För standarden funkar inte heller fullt ut på alla webbläsare idag.

Självklar ska man även testa sidan i de webbläsare som majoriteten av målgruppen använder.

asmodieMedlem sedan jan. 2004501 inlägg
#15

Oki...
Ska hoppas få myndighet som kund då :)

136 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)