#asp.net #gridview #asp.net-membership #asp.net-profiles #stay-logged-in
#asp.net #gridview #asp.net-членство #asp.net-profiles #оставайтесь в системе
Вопрос:
У меня есть gridview со списком моих пользователей (используя ASP.Net Поставщики членства и профилей), и мне удалось отобразить все нужные мне поля. Но проблема в том, что когда я захожу на страницу, которая редактирует профиль пользователя, или добавляю столбец в gridview, где отображается какое-либо поле из профиля пользователей, они устанавливаются как зарегистрированные.
Почему это? Можно ли этого избежать?
Мне нужно знать список пользователей, и кто действительно вошел в систему в данный момент, но с этой проблемой я не могу знать, потому что все пользователи отмечены как вошедшие в систему.
Вот код моего представления в виде сетки.
<asp:GridView ID="gvUsers" runat="server" AutoGenerateColumns="False"
DataKeyNames="UserName"
OnRowCreated="gvUsers_RowCreated" OnRowDeleting="gvUsers_RowDeleting"
Font-Size="8pt" Width="700px" CellPadding="4" ForeColor="#333333"
GridLines="None" AllowSorting="true">
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<Columns>
<asp:BoundField HeaderText="Usuario" DataField="UserName"/>
<asp:HyperLinkField HeaderText="E-mail" DataTextField="Email"
DataNavigateUrlFormatString="mailto:{0}" DataNavigateUrlFields="Email" />
<asp:TemplateField HeaderText="No. Cliente">
<ItemTemplate>
<asp:Label ID="lblCustormerID" runat="server" Text='<%# Profile.GetProfile(Eval("UserName").ToString()).Contacts.CustomerID %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="Creado" DataField="CreationDate"
DataFormatString="{0:MM/dd/yy h:mm tt}" />
<asp:BoundField HeaderText="Ultima Actividad" DataField="LastActivityDate"
DataFormatString="{0:MM/dd/yy h:mm tt}" />
<asp:CheckBoxField HeaderText="Activo" DataField="IsApproved"
HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" >
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:CheckBoxField>
<asp:CheckBoxField HeaderText="En Línea" DataField="IsOnline"
HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" >
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:CheckBoxField>
<asp:HyperLinkField Text="<img src='../images/edit.gif' border='0' />"
DataNavigateUrlFormatString="EditUsers.aspx?UserName={0}"
DataNavigateUrlFields="UserName" />
<asp:ButtonField CommandName="Delete" ButtonType="Image"
ImageUrl="~/images/delete.gif" />
</Columns>
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<EmptyDataTemplate>No se encontraron usuarios.</EmptyDataTemplate>
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<EditRowStyle BackColor="#999999" />
<AlternatingRowStyle BackColor="White" />
</asp:GridView>
Я потратил часы на поиск ответа в Google без какой-либо удачи, поэтому ваша помощь очень ценится.
Заранее спасибо!
Комментарии:
1. Проблема здесь на странице «EditUsers.aspx», и это страница, которую вам нужно исследовать и показать здесь.
2. Не обязательно. Проблема связана с EditUsers.aspx и Users.aspx, где находится gridview. Дело в том, что независимо от того, где, всякий раз, когда я редактирую или получаю доступ к информации профиля пользователя, этот пользователь помечается как онлайн.
3. разве вы не видите? вы сами говорите, проблема в том, что вы вызываете EditUser.aspx. Проверьте этот код или приведите его здесь, чтобы получить дополнительную помощь. Из кода, который вы приводите здесь, нет подсказки, что вызывает эту проблему.
4. Хорошо, в столбце gridview: <asp:TemplateField HeaderText=»Нет. Cliente»> <ItemTemplate> <asp: Идентификатор метки =»lblCustormerID» runat=»server» Text='<%# Профиль. getProfile(Оценка («Имя пользователя»). toString()). Контакты. CustomerID %>’></asp:Label> </ItemTemplate> </asp:TemplateField> Часть, в которой указано Profile. getProfile(Оценка («Имя пользователя»). toString()). Контакты. Причиной этого является CustomerID.
5. В EditUsers.asp в Page_Load есть строка, которая гласит: Скрыть профиль как ProfileCommon = Me.Profile профиль = Me.Profile. getProfile (Me.UserName) Понял?
Ответ №1:
Недавно я внедрил аналогичную систему в одном из своих приложений, в котором использовалась аутентификация Windows, которая будет работать здесь.
У меня есть класс под названием ActiveUser, в котором есть поля userId, UrlRequested и DateRequested, и другой класс под названием ActiveSession, который имеет List(Of ActiveUser)
. Он также имеет статические методы AddUser (который удаляет любой существующий элемент в списке, соответствующий идентификатору пользователя, а затем добавляет новый) и getUsers, который удаляет всех, у кого запрошена дата старше 10 минут.
Затем в Global.asax
файле под Application_Start
я установил класс ActiveSession. В Application_BeginRequest
я добавляю пользователя в список. Затем вы можете привязать список из getUsers к любой странице, которую вы хотите.