Шрифт:
(MembershipUserCollection)ViewData.Model) { %>
<tr>
<td><%= Html.ActionLink("Выбрать",
"Select",
new {userid = (Guid)user.ProviderUserKey}) %>
</td>
<td><%= Html.Encode(user.UserName) %></td>
<td><%= Html.Encode(user.Email) %></td>
<td><%= user.LastActivityDate %></td>
<td><%= user.IsApproved %></td>
<td><%= user.IsLockedOut %></td>
</tr>
<% } %>
</table>
</asp:Content>
Теперь мы можем запустить проект и посмотреть на результат работы. Для этого нам необходимо войти в систему под пользователем Admin и перейти по адресусайт"/Admin. Если вы все сделали правильно, то результатом будет примерно такой список пользователей — рис. 4.6.
Рис. 4.6. Список пользователей
Для завершения создания контроллера реализуем все остальные необходимые действия так, как показано в листинге 4.1.
Листинг 4.1. Действия контроллера AdminController
public ActionResult Select(Guid? userId)
{
if (!userId.HasValue)
throw new HttpException(404, "Пользователь не найден");
if (User.IsInRole("Administrators"))
{
MembershipProvider mp = Membership.Provider;
MembershipUser user = mp.GetUser(userId, false);
ViewData.Model = user;
return View ;
}
else
{
return RedirectToAction("Index", "Home");
}
}
public ActionResult Update(Guid? userId,
string email,
bool isApproved,
bool isLockedOut)
{
if (!userId.HasValue)
throw new HttpException(404, "Пользователь не найден");
if (User.IsInRole("Administrators"))
{
MembershipProvider mp = Membership.Provider;
MembershipUser user = mp.GetUser(userId, false);
user.Email = email; user.IsApproved = isApproved;
if (user.IsLockedOut && !isLockedOut)
user.UnlockUser;
mp.UpdateUser(user);
return RedirectToAction("Index");
}
else
{
return RedirectToAction("Index", "Home");
}
}
public ActionResult Delete(Guid? userId)
{
if (!userId.HasValue)
throw new HttpException(404, "Пользователь не найден");
if (User.IsInRole("Administrators"))
{
MembershipProvider mp = Membership.Provider;
MembershipUser user = mp.GetUser(userId, false);
mp.DeleteUser(user.UserName, true);
return RedirectToAction("Index");
}
else
{
return RedirectToAction("Index", "Home");
}
}
В листинге 4.1 определено три действия для отображения данных конкретного пользователя, удаления данных и сохранения новых данных. Обратите внимание, что действия Update и Delete не возвращают сопоставленного представления, а только перенаправляют запрос на вызов других действий с имеющимися представлениями. Только действие Select возвращает сопоставленное представление. Давайте создадим соответствующее представление для контроллера Admin, назвав его Select, и определим его следующим образом:
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent"
runat="server">
<%=Html.ActionLink("Вернуться в список", "Index")%>
<% MembershipUser user = (MembershipUser) ViewData.Model; %>
<h1>Пользователь <%= Html.Encode(user.UserName) %></h1>
<% using (Html.BeginForm("Update", "Admin")) { %>
<%= Html.Hidden("userId", (Guid)user.ProviderUserKey) %>
<fieldset>
<legend>Данные</legend>
<label for="email">Email</label>
<%=Html.TextBox("email", user.Email)%>
<label for="isApproved"><%=Html.CheckBox("isApproved",
user.IsApproved)%>подтвержден</label>
<label for="isLockedOut"><%=Html.CheckBox("isLockedOut",
user.IsLockedOut)%>заблокирован</label>
</fieldset>
<input type="submit" value="Сохранить" />