ASP.NET перейти к привязке в коде позади - PullRequest
3 голосов
/ 20 августа 2009

У меня есть простая веб-форма с кодом, подобным этому:

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

После POST я хочу направить пользователя к своему якорному «сообщению». У меня есть следующий код для этого:

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

Этот простой JavaScript не работает в Firefox 3.5.2 - URL изменяется в браузере, но страница не привязана к привязке. В IE 8 работает отлично.

Почему этот код JavaScript не работает в Firefox? Я что-то упустил?

Ответы [ 4 ]

7 голосов
/ 20 августа 2009

Я решил свою проблему. Код JavaScript был вызван еще до того, как якорь появился. Вот почему Firefox не был страницей прокрутки вниз.

Мой код теперь выглядит так:

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

После загрузки страницы я вызываю свою простую функцию JavaScript.

Ключом к найденному решению был ответ Клитона. Firebug сообщает, что getElementById возвращал нулевую ссылку. Затем я посмотрел на сгенерированный HTML, как предложил ЭндрюВинн - JavaScript вызывался до того, как существовала привязка. Сделал небольшой поиск в Google и нашел решение.

Спасибо за ваши ответы!

5 голосов
/ 20 августа 2009

Мендоса, вы можете использовать встроенную функцию scrollIntoView .

Чтобы делать то, что вы хотите, просто напишите:

this.ClientScript.RegisterStartupScript(this.GetType(),
                                        "navigate",
                                        "document.getElementById('id_of_the_element').scrollIntoView();",
                                        true);
1 голос
/ 20 августа 2009

Вы можете попробовать использовать плагин jQuery LocalScroll . Используя это, вы можете прокрутить, используя:

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

Или с вашим кодом ASP.NET:

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

Это не идеальное решение, особенно если вы уже не используете jQuery в своем проекте, но оно может решить вашу проблему.

1 голос
/ 20 августа 2009

Я столкнулся с этим один раз. Вы взглянули на фактический HTML? Если я помню, FireFox был чувствительным к регистру якорей. Я не знаю, изменилось ли это недавно или нет.

...