элементы jquery и html, которые работают на сервере - PullRequest
1 голос
/ 28 мая 2009

У меня есть элемент, содержащийся в пользовательском элементе управления (заголовок). Этот div включает в себя sub div внутри. Один из них включает в себя параметры пользователя. Параметры пользователя div () отображают имя пользователя вошедшего в систему пользователя и пару ссылок, связанных с уже вошедшими в систему пользователями, таких как выход из системы, настройки и т. Д. Div "user_options" абсолютно расположен внутри div "header".

Теперь, на самой странице входа в систему, я хочу скрыть этот div, поскольку пользователь попадает туда, потому что он / она не вошел в систему. В этом случае я помещаю атрибут runat = "server" в "user_options" div и я переносим событие page_load страницы .aspx, чтобы убедиться, что пользователь вошел в систему следующим образом:

if check_user_loggedin() then
  user_options.attributes("style") = "display:none;"
  ' also tried this with user_options.visible = false and 
else
  user_options.attributes("style") = "display:block;" 
  ' in this one, I even tried the whole positioning css e.g. display:block; positon:absolute; left:100px; etc...
end if

теперь с этим кодом, когда я запускаю проект, он работает нормально, где я не хочу отображать div - он успешно скрывается. Но на тех страницах, где мне нужно показать div, он все равно отображается в дальнем верхнем левом углу страницы, и событие щелчка jquery других элементов div внутри него также не работает.

Я предполагаю, что это имеет отношение к порядку выполнения или циклу событий страницы, но можете ли вы предложить какой-нибудь обходной путь для этого?

========= РЕДАКТИРОВАТЬ =========================
ЭТО CSS:

   #user_options
    {
        position:absolute;
        top:18px;
        right:10px;
        width:200px;
        color:#ffffff;
        text-align:right;
    }

ЭТОТ HTML:

<div id="user_options" **runat="server"**>
    <strong><a class="whiteLink" href="#"><%=MyNamespace.Users.getUsernameFromCookie%></a></strong> | <a class="whiteLink" href="usr_logout.aspx">logout</a> | <a class="whiteLink" href="#">settings</a> | <a class="whiteLink" href="#">help</a>
</div>

ЭТО КОД В КОНТРОЛЕ ПОЛЬЗОВАТЕЛЯ:

Private _displayUserOptions As Boolean
Public Property displayUserOptions() As Boolean
    Get
        Return _displayUserOptions
    End Get
    Set(ByVal value As Boolean)
        _displayUserOptions = value
    End Set
End Property


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If displayUserOptions Then
        user_options.Attributes("style") = "display:none;"
    Else
        user_options.Attributes("style") = "display:block;"
    End If
End Sub

Это то, что я вызываю на HTML-странице, чтобы отобразить пользовательский контроль

<uc1:x_layout_top ID="x_layout_top1" runat="server" displayUserOptions="false" />

Ответы [ 2 ]

5 голосов
/ 29 мая 2009

Прежде чем мы перейдем к ASP.NET 4.0 и ClientIdMode = "Static", я бы предложил использовать уникальные имена классов для решения этой проблемы.

<div id="user_options" runat="server" class="user_options">....

Потому что тогда вы можете a) использовать код для доступа к user_options, а затем использовать jQuery и CSS для доступа к .user_options вместо #user_options

1 голос
/ 28 мая 2009

Возможно, ваша проблема связана с вложенными именами контейнеров. Когда ваш пользовательский элемент управления размещается на странице и div получает атрибут runat = "server", он, вероятно, будет называть div чем-то вроде ID = "ctrl00_user_options".

В качестве альтернативы, и если вы используете платформу провайдера Membership, вы можете использовать элемент управления логином для управления отображением имени пользователя. В противном случае вы можете сделать что-то подобное в своей разметке (при условии, что на странице доступна переменная с именем user :

<script type="text/javascript">
$(function() { if (user) { $("#<%= user_options.ClientID %>").hide();});
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...