更新部分视图操作的部分视图

时间:2011-06-10 00:43:54

标签: asp.net-mvc-3

我在ASP.NET MVC 3工作一周。这可能是一个非常基本的问题,或者之前有人可能会问过类似的问题。我正在寻求帮助,向我展示正确的路径/方法,以解决我所面临的问题。

我已创建了部分视图登录(在侧栏中),如下所示。我想在这里实现的是,当我点击“登录”按钮时,我必须能够使用诸如

之类的信息更新部分视图。

**欢迎[用户名]

Last SuccessFul登录:[DateTime]

会员自:[日期] **

我不确定是否需要创建另一个部分视图来显示此信息或者可以根据操作动态更新登录部分视图。

登录部分视图

@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 :(得分:0)

我之前和同龄人讨论过这个问题。

IMO登录/注销不应该通过AJAX完成,它应该是常规的HTTP POST。

为什么呢?那么,如果您的页面需要管理员访问权限,那么您通过AJAX注销?你仍然在页面上 - 当你不应该被授权这样做时(除非你当然更新页面的主要部分,这有点愚蠢)

所以我的建议 - 让登录按钮对动作方法进行常规POST,然后使用PRG模式重定向回原始页面。

当然,如果您没有管理员/权限/角色的概念,那么AJAX登录/注销就可以了。

无论如何,你使用局部视图做了正确的事。

您的部分视图应该确定用户是否经过身份验证,然后根据该模板呈现适当的编辑器/显示模板。

例如:_Login.cshtml

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