webForumDet fria alternativet

HTMLEncode och asp:hyperlink

.NET

7 svar · 588 visningar · startad av Addeladde

Medlem sedan jan. 20013 406 inlägg
Frågan#1

Hej

ASP.NET har ju som standard att HTML encoda allt som skickas ut till de inbyggda kontrollerna. Om man har en asp:hyperlink och skickar ut en adress med en frågesträng så omvandlas t.ex. & till & I de allra felsta fall är detta ingen fara eftersom webbläsarna ändå hanterar det korrekt. Problemet är att jag skickar med en variabel på varje sida om tidigare sida. Tidigare sida kan ligga i 5 steg frammår. Löser det genom att URL encoda föregående sidas sträng. Detta fungerar perfekt om jag använder asp:literal och skriver ut hela länken med använder jag asp:hyperlink så blir det fel när fler än 2 sidor ligger bakåt.

Kan man stänga av HTMLEncode på en enskild kontroll?
Eller ser ni någon annan lösning?

Vissa webcrawlers kan även att ha problem att tolka adressen rätt om tecknen görs om.

Medlem sedan dec. 19996 721 inlägg
#2

Addeladde skrev:

Hej

ASP.NET har ju som standard att HTML encoda allt som skickas ut till de inbyggda kontrollerna. Om man har en asp:hyperlink och skickar ut en adress med en frågesträng så omvandlas t.ex. & till & I de allra felsta fall är detta ingen fara eftersom webbläsarna ändå hanterar det korrekt.

&-tecken i en href SKA skrivas &, så det är egentligen mer ett gammalt otyg att okodade &-tecken accepteras av webbläsarna.

Addeladde skrev:

Problemet är att jag skickar med en variabel på varje sida om tidigare sida. Tidigare sida kan ligga i 5 steg frammår. Löser det genom att URL encoda föregående sidas sträng.

Om du ser till att inte dubbelencoda på vägen (dvs. avkoda värdena innan du skickar med dem igen) så borde du inte få några problem.

Medlem sedan jan. 20013 406 inlägg
#3

Jag får problem på det trede steget.

backButton = server.UrlDecode(Request["backpage"]);
nextButton = "page.aspx?backPage=page.asp" + server.UrlEncode(Request["backpage"]));

Jag får problem på det trede steget. När jag klickar på tillbaka så funkar det men när jag trycker på tillbaka på sidan jag hamnade så får jag fel. Den har tagit bort backpage och ersatt det med ett komma tecken.

Medlem sedan dec. 19996 721 inlägg
#4

Du ska inte UrlDecoda något från request "manuellt". Det görs ändå, per automatik. Det jag menade med att värden ska vara avkodade var att du inte ska hämta rå URL-data, vilket jag misstänkte att du gjorde.

Medlem sedan jan. 20013 406 inlägg
#5

Jag har testat att inte urldecoda också. Testade även att göra om alla länkar till literal och skriva ut dem själv men det funkar fortfarande inte. Jag har fått detta att fungera i traditionell asp men då har jag istället för URLencode Escapat backpage strängen.

Skumt att det inte fungerar. Jag fattar inte vad komma tecknet kommer ifrån.

Medlem sedan jan. 20013 406 inlägg
#6

Jag klickar på denna länk (visa källa på sidan):

CourseAddStudentFromClass.aspx?id=232&backPage=CourseAddStudents.aspx%3fid%3d232%26backPage%3dCourseHandleStudents.aspx%253fid%253d232%2526backPage%253dCourse.aspx%25253fid%25253d232

När jag kommit till den sidan och trycker på tillbaka med denna länk:

CourseAddStudents.aspx?id=232&backPage=CourseHandleStudents.aspx%3fid%3d232%26backPage%3dCourse.aspx%253fid%253d232

När jag kommit tillbaka så är tillbaka länken på den sidan följande:

CourseHandleStudents.aspx?id=232,Course.aspx?id=232

Går jag bakåt och UrlDecodar via denna webbplats så blir det rätt men inte i webbläsaren.

Medlem sedan jan. 20013 406 inlägg
#7

Löste det. Var en urldecode som spökade Men fortfarande inte fått det att fungera med en vanlig hyperlink.

Medlem sedan dec. 19996 721 inlägg
#8

Kommatecknet kommer från det faktum att länken innehåller flera backPage-värden, som automatiskt konkateneras med komma av ASP.NET.

Jag misstänker att du missar att UrlEncoda någonstans på vägen.

256 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)