Россия |
Опубликован: 07.05.2010 | Уровень: для всех | Доступ: платный
Лекция 18:
Безопасность
Обновление пользователей в хранилище
Если у нас есть экземпляр класса MembershipUser, то мы можем обновить его свойства, имеющие аксессор set, а именно:
Для этого используется статический метод Membership.UpdateUser().
-
Получите из страницы GetUsersMembership.aspx копию с именем UpdateUserMembership.aspx
-
Скорректируйте страницу UpdateUserMembership.aspx, чтобы обновляемые параметры таблицы деталей размещались в текстовых полях
-
Закрепите за полем txtEmail элементы проверки достоверности RequiredFieldValidator и RegularExpressionValidator
Окончательный код страницы UpdateUserMembership.aspx будет таким
<%@ Page Language="C#" EnableViewState="false" %> <%@ Import Namespace="System.Web.Security" %> <script runat="server"> // Вынесли поле для видимости в обработчиках MembershipUserCollection myUsers = new MembershipUserCollection(); protected void Page_Load(object sender, EventArgs e) { // Скрываем таблицу деталей tableDetails.Visible = false; lblUser.Visible = false; // Извлекаем всех пользователей myUsers = Membership.GetAllUsers(); // Подключаем к сетке извлеченную информации и наполняем элемент UsersGridView.DataSource = myUsers; UsersGridView.DataBind(); } // Обработчик щелчков на ссылки столбца отображения деталей protected void UsersGridView_SelectedIndexChanged(object sender, EventArgs e) { if (UsersGridView.SelectedIndex >= 0) { // Заполняем интерфейсные элементы отображаемой информацией, // адресуясь к конкретному пользователю по ключевому имени, // заданному параметром DataKeyNames="UserName" элемента GridView MembershipUser currentUser = myUsers[(string)UsersGridView.SelectedValue]; lblUserName.Text = currentUser.UserName; txtEmail.Text = currentUser.Email; lblPasswordQuestion.Text = currentUser.PasswordQuestion; lblLastLoginDate.Text = currentUser.LastLoginDate.ToLongDateString(); txtComment.Text = currentUser.Comment; checkIsApproved.Checked = currentUser.IsApproved; checkIsLockedOut.Checked = currentUser.IsLockedOut; // Включаем видимость таблицы деталей tableDetails.Visible = true; lblUser.Visible = true; } } protected void btnUpdate_Click(object sender, EventArgs e) { if (UsersGridView.SelectedIndex >= 0) { // Адресуемся к выделенному пользователю MembershipUser currentUser = myUsers[(string)UsersGridView.SelectedValue]; // Избавляемся от возможных управляющих символов // в пользовательском вводе currentUser.Email = Server.HtmlEncode(txtEmail.Text); currentUser.Comment = Server.HtmlEncode(txtComment.Text); currentUser.IsApproved = checkIsApproved.Checked; // Сбрасываем в базу данных Membership.UpdateUser(currentUser); // Обновить содержимое GridView из БД, поскольку // этот обработчик выполнится после Page_Load myUsers = Membership.GetAllUsers();// Извлекаем пользователей UsersGridView.DataBind(); } } </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <h2> <asp:Label ID="lblUsersList" runat="server" Font-Bold="true" Text="Список зарегистрированных пользователей"></asp:Label> </h2> <asp:GridView ID="UsersGridView" runat="server" DataKeyNames="UserName" AutoGenerateColumns="False" OnSelectedIndexChanged="UsersGridView_SelectedIndexChanged"> <Columns> <asp:BoundField DataField="UserName" HeaderText="Имя" /> <asp:BoundField DataField="Email" HeaderText="email" /> <asp:BoundField DataField="CreationDate" HeaderText="Создан" /> <asp:CommandField ShowSelectButton="True" HeaderText="Детали" SelectText="Показать" /> </Columns> </asp:GridView> <h2> <asp:Label ID="lblUser" runat="server" Text="Подробности для выделенного пользователя" Visible="False" Font-Bold="true"></asp:Label> </h2> <table id="tableDetails" border="1" bordercolor="#0000FF" width="100%" runat="server"> <tr> <td width="50%"> Пользователь:</td> <td> <asp:Label ID="lblUserName" runat="server"></asp:Label></td> </tr> <tr> <td width="50%"> <font color="#0000FF">email:</font></td> <td> <asp:TextBox ID="txtEmail" runat="server" Width="100%"> </asp:TextBox> <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txtEmail" Display="Dynamic">* </asp:RequiredFieldValidator> <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="txtEmail" Display="Dynamic" ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*">* </asp:RegularExpressionValidator></td> </tr> <tr> <td width="50%"> Контрольный вопрос:</td> <td> <asp:Label ID="lblPasswordQuestion" runat="server"></asp:Label></td> </tr> <tr> <td width="50%"> Дата последней регистрации:</td> <td> <asp:Label ID="lblLastLoginDate" runat="server"></asp:Label></td> </tr> <tr> <td valign="top" width="50%"> <font color="#0000FF">Комментарии:</font></td> <td> <asp:TextBox ID="txtComment" runat="server" TextMode="MultiLine" Width="100%"></asp:TextBox></td> </tr> <tr> <td width="50%"> <font color="#0000FF">Проверенный:</font></td> <td> <asp:CheckBox ID="checkIsApproved" runat="server" /></td> </tr> <tr> <td width="50%"> Заблокирован:</td> <td> <asp:CheckBox ID="checkIsLockedOut" runat="server" /></td> </tr> <tr> <td colspan="2" align="center"> <asp:Button ID="btnUpdate" runat="server" Text="Обновить" OnClick="btnUpdate_Click" /></td> </tr> </table> </div> </form> </body> </html>