#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. На данный момент я не планирую использовать роль администратора. У меня должно сработать вышесказанное. Большое спасибо.