Обновить частичное представление о действии частичного представления - PullRequest
1 голос
/ 10 июня 2011

Я работаю всего одну неделю с ASP.NET MVC 3. Это может быть очень простой вопрос, или кто-то, возможно, задавал подобный вопрос раньше. Я ищу помощи, чтобы показать мне правильный путь / метод для решения проблемы, с которой я сталкиваюсь при разработке частичного вида.

Я создал частичное представление входа (в боковой панели), как показано ниже. Чего я хотел бы достичь, так это то, что когда я нажимаю кнопку «Войти», я должен быть в состоянии обновить частичное представление с помощью такой информации, как

** Добро пожаловать [Имя пользователя]

Последний успешный вход в систему: [DateTime]

Пользователь с: [Date] **

Я не уверен, что мне нужно создать другое частичное представление для отображения этой информации. Или частичное представление входа в систему может быть обновлено на лету на основе действия.

Вход в систему Частичное представление

@model AlanBeezLab.Models.LoginModel
@using (Ajax.BeginForm("Login","UserLogin", new AjaxOptions { UpdateTargetId =Model.UserName }))
{
    <div >User Name
    @Html.TextBox(" ")
    </div>
    <div>Password
    @Html.Password(" ")
    </div>
    <p><input type="submit" value="Let me in!" /></p>

}

Ниже _Layout.cshtml

<!DOCTYPE html>
<html>
<head>
    <title>@ViewBag.Title</title>
       <!--link href="@Url.Content("~/Content/Site.css")" rel="stylesheet"    type="text/css" />-->
      <link href="@Url.Content("~/Content/SiteStyle.css")" rel="stylesheet" type="text/css" />
    <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/modernizr-1.7.min.js")" type="text/javascript"></script>
</head>

<body>
   <div id="Header" style="background-image: url('/Content/Images/Banner_Final3.png'); background-repeat:no-repeat; width :1500px; height : 150px;"   >

   </div>
  <div id="SideBar">
       @Html.Partial("UserControls/UserLogin", new AlanBeezLab.Models.LoginModel())
   </div>
   <div id="Content">
        @RenderBody()
   </div>
   <div id="Footer">
        <p>Copyright &copy; XXXXX</p>
   </div>
</body>
</html>

Ниже находится контроллер входа в систему

public class UserLoginController : Controller
{
    //
    // GET: /UserLogin/

    public ActionResult Index()
    {
        return View();
    }

    public ActionResult LogIn()
    {
        return [Not Sure];
    }

Я не уверен, что это лучший / правильный подход для достижения этой цели. Буду признателен, если меня направят на правильный путь / подход.

Спасибо

1 Ответ

0 голосов
/ 10 июня 2011

Я уже обсуждал это с моими коллегами.

Вход / выход из IMO не должен выполняться через AJAX, это должен быть обычный HTTP POST.

Почему?Ну что, если вы на странице, требующей доступа администратора, вы выходите из системы через AJAX?Вы все еще на странице - когда вам не нужно на это авторизоваться (если, конечно, вы не обновляете и основную часть страницы, что довольно глупо)

Так что мой совет - сделайте логинНажмите кнопку, чтобы выполнить обычный POST для метода действия, а затем используйте шаблон PRG для перенаправления обратно на исходную страницу.

Конечно, если у вас нет концепции администраторов / разрешений / ролей, тогда вход в AJAX/ logout будет в порядке.

Независимо от того, что вы сделали правильно с частичным представлением.

Ваше частичное представление должно выяснить, аутентифицирован ли пользователь, а затем отобразить соответствующий редактор /отображать шаблон на основе этого.

Например: _Login.cshtml:

@if(Request.IsAuthenticated) {
   @Html.DisplayFor(Context.User.Identity)
} else {
   @* editor fields *@
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...