Опубликован: 07.05.2010 | Доступ: свободный | Студентов: 1678 / 62 | Оценка: 4.56 / 4.06 | Длительность: 34:11:00
Лекция 18:

Безопасность

< Лекция 17 || Лекция 18: 123456789

Обновление пользователей в хранилище

Если у нас есть экземпляр класса MembershipUser, то мы можем обновить его свойства, имеющие аксессор set, а именно:

  • Comment
  • Email
  • IsApproved
  • LastActivityDate
  • LastLoginDate

Для этого используется статический метод 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>
< Лекция 17 || Лекция 18: 123456789