2009-08-20 1 views
3

Ich habe ein einfaches Web-Formular mit Code wie folgt in Code zu verankern:ASP.NET navigieren hinter

//... 
//tons of text 
//... 
<a name="message" /> 
//... 
//tons of text 
//... 
<asp:Button ID="ButtonSend" 
       runat="server" 
       text="Send" 
       onclick="ButtonSend_Click" /> 

Nach POST ich Benutzern meines Anker „message“ navigieren möge. Ich habe folgenden Code dafür:

protected void ButtonSend_Click(object sender, EventArgs e) 
{ 
this.ClientScript.RegisterStartupScript(this.GetType(), 
             "navigate", 
             "window.location.hash='#message';", 
             true); 
} 

Diese einfache JavaScript funktioniert nicht in Firefox 3.5.2 - URL in Browser ändert sich aber Seite navigiert wird nicht zu verankern. In IE 8 funktioniert es perfekt.

Warum funktioniert dieser JavaScript-Code in Firefox nicht? Fehle ich etwas?

+0

scheint für mich zu arbeiten ... mit FF 3.0.13 // IE8 beide Browser scrollte perfekt ... ich denke, es sollte funktionieren, aber Sie könnten Cleiton Code versuchen, wenn es nicht ist –

Antwort

6

Ich habe mein Problem gelöst. JavaScript-Code wurde aufgerufen, bevor mein Anker überhaupt existierte. Deshalb scrollte Firefox nicht runter.

Mein Code sieht nun wie tihs:

this.ClientScript.RegisterStartupScript(this.GetType(), 
             "navigate", 
             "window.onload = function() {window.location.hash='#message';}", 
             true); 

Nach Laden der Seite ich meine einfache JavaScript-Funktion nenne.

Der Schlüssel zur Lösung war die Antwort von Cleiton. Firebug meldet, dass getElementById NULL-Referenz zurückgegeben hat. Dann sah ich generierten HTML-Code wie andrewWinn vorgeschlagen - JavaScript wurde aufgerufen, bevor Anker vorhanden war. Habe ein wenig gegoogelt und eine Lösung gefunden.

Vielen Dank für Ihre Antworten!

+0

Wenn Sie nicht # in der Nachricht angeben Firefox scheint es selbst hinzuzufügen. Hatte versucht, ".hash" zuzuweisen, um Abfrageparameter auf der Clientseite (ohne Seitenaktualisierung) ohne Erfolg auf die URL zu schreiben –

4

Mendoza, können Sie native scrollIntoView Funktion verwenden.

zu tun, was Sie wollen, schreiben Sie einfach:

this.ClientScript.RegisterStartupScript(this.GetType(), 
             "navigate", 
             "document.getElementById('id_of_the_element').scrollIntoView();", 
             true); 
+0

Ihre Lösung ist nicht funktioniert auch :(Getestet auf Firefox 3.5.2 und IE 8. Auch getestet auf anderen Computern mit Firefox 3.0.10 und IE 8 - funktioniert nicht. Ich verstehe es einfach nicht:/ – GTD

+0

@ Mendoza, ich habe es mit IE6 und getestet Firefox 3.5.2 und es hat gut funktioniert.Ich denke, dass Sie etwas falsch gemacht haben.Zum Beispiel, Sie müssen eine ID für diese Lösung zu arbeiten haben. – Cleiton

+0

Problem ist bereits gelöst. Schauen Sie auf meine Antwort :) – GTD

1

ich in dieses eine Mal lief. Haben Sie sich den aktuellen HTML-Code angesehen? Wenn ich mich erinnere, wurde FireFox auf den Ankern sensibilisiert. Ich weiß nicht, ob sich das kürzlich geändert hat oder nicht.

+0

Diese Antwort sollte ein sein Kommentar. Es ist eine Frage für die ursprüngliche Frage Autor und Spekulation mit "Ich weiß nicht" – perfectionist

1

Sie könnten versuchen, die jQuery LocalScroll plugin verwenden. Mit diesem können Sie blättern mit:

$(function() { 
    $.scrollTo("#message"); 
}); 

Oder mit Ihrem ASP.NET-Code:

protected void ButtonSend_Click(object sender, EventArgs e) 
{ 
    this.ClientScript.RegisterStartupScript(this.GetType(), 
              "navigate", 
              "$(function() { $.scrollTo('#message'); });", 
              true); 
} 

Es ist keine ideale Lösung, vor allem wenn Sie mit jQuery überall in Ihrem Projekt nicht bereits, aber es könnte dein Problem lösen.