webForumDet fria alternativet

Response.Redirect med IE

.NET

2 svar · 379 visningar · startad av haagel

Medlem sedan feb. 2006134 inlägg
Frågan#1

Hej!

Har stött på ett för mig konstigt problem.

Håller på att bygga en egen blogg. När en besökare skrivit en kommentar till ett inlägg och trycker på knappen "Skicka" så körs en metod i koden. Metoden lagrar kommentaren i databasen och ska sedan skicka besökaren till samma sida som kommentaren gjordes på. Sidan heter alltid BlogPost.aspx, men visar olika inlägg beroende på en variabel i URL:en, t.ex. "BlogPost.aspx?blogpost=5". Därför blir koden:

Response.Redirect( "BlogPost.aspx?blogpost=" + Convert.ToString(blogPostId) );

Så länge fungerar det fint...

Nu kom jag på att jag vill att besökaren direkt ska skickas till avdelningen för kommentarer på denna sida, så att dennes kommentar hamnar längst upp i browsern. Jag lade till ett ankare "Comments" där kommentarerna börjar och ändrade koden en aning:

Response.Redirect("BlogPost.aspx?blogpost=" + Convert.ToString(blogPostId) + "#Comments");

Nu uppstår problemet...
Denna kod fungerar fint när jag testar i FireFox, men inte när jag testar i Internet Explorer. Jag trodde man slapp sådana problem när man kodar på serversidan, men tydligen inte...

Jag testar i IE 6.

I min Page_Load för BlogPost.aspx finns följande:

blogPostId = Convert.ToInt32(Request.QueryString["blogpost"].ToString());

Det verkar som att problemet uppstår här. Kan det vara så att querystrings behandlas annorlunda med IE på något sätt? URL:en kommer ju att se ut typ:

BlogPost.aspx?blogpost=5#Comments

Kan det vara så att istället för att försöka konvertera "5" till en int så försöker koden att konvertera "5#Comments" till en int? Det låter som en förklaring, men det är ändå konstigt att det fungerar i FF men inte IE...

Någon som varit med om något liknande eller har någon idé?

Medlem sedan feb. 2006134 inlägg
#2

Testade min teori och den verkar stämma. Skrev om koden till:

string temp = Request.QueryString["blogpost"].ToString();
int index = temp.IndexOf("#");
if (index >= 0)
{
    temp = temp.Substring(0, index);
}
blogPostId = Convert.ToInt32(temp);

Nu fungerar det. Det verkar alltså som att även "#Comments" tas med i querystringen när man kör med IE.

Jag är fortfarande intresserad om det är nån som vet mer om detta....

Medlem sedan mars 20041 505 inlägg
#3

Nu är jag ingen ASP.NET-programmerare, men Response.Redirect spottar väl ur sig en 30X HTTP-header?
Kör sidan genom något verktyg som visar alla headers, exempelvis detta.
Då kan du se headern i klartext vilket troligen förklarar en del.

261 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)