hyperlink.NavigateUrl изменяется на главной странице (возможно, ResolveUrl ()) - PullRequest
2 голосов
/ 09 февраля 2011

У меня есть гиперссылка, которую в некоторых случаях я хочу изменить, чтобы показать всплывающее окно jquery, но у меня возникает странная проблема при выполнении этого на главной странице. На обычной странице работают:

hyp1.NavigateUrl = "#notificationPopup";

Что отображается как:

<a id="ctl00_hyp1" href="#notificationPopup">Example</a>

Это именно то, что я хочу. Проблема заключается в том же коде гиперссылки на главной странице, которую он отображает как:

<a id="ctl00_hyp1" href="../MasterPages/#notificationPopup">Example</a>

Похоже, что он может запускать navigateUrl через ResolveClientUrl () или что-то подобное, когда я устанавливаю его на главной странице. Я пытался поменять <asp:hyperlink на <a href runat=server, но происходит то же самое.

Есть идеи?

Ответы [ 3 ]

1 голос
/ 08 марта 2011

На MSDN есть примечание Control.ResolveClientUrl описание метода.

URL, возвращаемый этим методом: относительно папки, содержащей исходный файл, в котором находится элемент управления инстанцирован. Элементы управления, которые наследуют это свойство, такое как UserControl и MasterPage, вернет полностью уточненный URL относительно элемента управления.

Таким образом, поведение главной страницы в вашем экзамене полностью предсказуемо (хотя работать с ним не очень удобно). Так каковы альтернативы?

Лучше всего установить <a> в качестве клиентского элемента управления (удалить runat="server"); должен работать как шарм даже на главной странице:

<a href="#notificationPopup">Example</a>

В случае, если этот элемент управления должен быть только на стороне сервера: вы можете просто создать URL из своего кода, используя UriBuilder class:

UriBuilder newPath = new UriBuilder(Request.Url);
// this will add a #notificationPopup fragment to the current URL
newPath.Fragment = "notificationPopup";
hyp1.HRef = newPath.Uri.ToString();
0 голосов
/ 21 января 2016

Я нашел другой способ решения проблемы.

hyp1.Attributes.Add("href", "#notificationPopup");
0 голосов
/ 08 марта 2011

Создайте скрытое поле в вашей форме и установите значение, в котором вы хотите перемещаться / URL-адрес гиперссылки вместо гиперссылок навигации URL-адреса.Затем вызовите метод onclick для гиперссылки в javascript и установите гиперссылку там до того, как браузер выполнит фактическую навигацию.

<html><head><title></title></head>
<script type="text/javascript">

function navHyperlink(field)
{
field.href = document.getElementById('ctl00_hdnHypNav').value;
return true;
}

</script>
<input type="hidden" id="hdnHypNav" value="test2.html" runat="server"/>
    <a href="" onclick="navHyperlink(this);" >click here</a>
</html>

Код будет следующим: hdnHypNav.value = "#notificationPopup";

Вы также можете просто попытаться установить URL после постбэка с указанным ниже кодом, т.е. заменить ваш код за строкой на этот, но я не уверен, будет ли он работать ...

ScriptManager.RegisterStartupScript(this,this.GetType(),"SetHyp","$('ctl00_hyp1').href = '#notificationPopup';",True)
...