Обновление частичного представления при действии частичного представления

#asp.net-mvc-3

#asp.net-mvc-3

Вопрос:

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

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

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

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

Участник с: [Дата]**

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

Вход в частичный вид

 @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 amp;copy; XXXXX</p>
   </div>
</body>
</html>
  

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

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

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

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

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

Спасибо

Ответ №1:

У меня уже было это обсуждение с моими коллегами раньше.

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

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

Итак, мой совет — сделайте так, чтобы кнопка входа выполняла обычную публикацию для метода действия, затем используйте шаблон PRG для перенаправления обратно на исходную страницу.

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

В любом случае, вы поступили правильно с частичным представлением.

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

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

 @if(Request.IsAuthenticated) {
   @Html.DisplayFor(Context.User.Identity)
} else {
   @* editor fields *@
}
  

Комментарии:

1. На данный момент я не планирую использовать роль администратора. У меня должно сработать вышесказанное. Большое спасибо.