2

我正在 MVC 4 中创建一个 Web 应用程序。我们如何创建不同的视图并根据用户是否登录来呈现它?我不确定我是否问对了问题,因为我是编程新手。我在网上看过这个,但没有找到任何指导初学者这样做的资源。我很确定这是在控制器中完成的,但我的问题是如何告诉控制器在检查用户是否登录后呈现不同的视图。但是,如果有其他明显且有效的方法可以做到这一点,那么我如果有人花时间回答这个问题,将不胜感激。

4

2 回答 2

1

当你这样做时有一个覆盖return View()

return View("myView", myModel");

例如

public ActionResult Index()
{
    if(User.Identity.IsAuthenticated)
        return View("GoodUser");

    return View("BadUser");
}

但是,如果您是新手,我建议您做两件事:

  • 请参阅http://www.asp.net/mvc中免费提供的漏洞在线诅咒(右侧显示“基本视频”)
  • 创建一个 MVC3 项目,看看他们是如何做到的,因为它已经与 Membership 一起提供
于 2013-06-08T22:56:07.700 回答
0

您可以使用表单身份验证。

视图模型:

public class LogIN
    {
        [Required]
        [DisplayName("User name")]
        public string UserName { get; set; }

        [Required]
        [DataType(DataType.Password)]
        [DisplayName("Password")]
        public string Password { get; set; }

    }

存储库:

public class LogInRepository 
    {


        public bool CheckUser(string UserName, string Password)
        {

          //Query the database here and return true or false depending on the username and the password
        }
    }

控制器:

[HttpPost]
       public ActionResult LogOn(LogIN model, string returnUrl)
       {
           if (ModelState.IsValid)
           {
               LogInRepository rep = new LogInRepository();
               string UserRole = string.Empty;
               if (rep.CheckUser(model.UserName, model.Password))
               {
                  FormsAuthentication.SetAuthCookie(model.UserName);


                   if (!string.IsNullOrEmpty(returnUrl))
                       return Redirect(returnUrl);
                   else
                       return Redirect(FormsAuthentication.DefaultUrl);

               }
               else
               {
               ModelState.AddModelError("", "The user name or password provided is incorrect.");
               }

           }

           // If we got this far, something failed, redisplay form
           return View(model);
       }

看法:

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Account LogIn</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.UserName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.UserName)
            @Html.ValidationMessageFor(model => model.UserName)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Password)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Password)
            @Html.ValidationMessageFor(model => model.Password)
        </div>


        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>

Web.config 设置:

<authentication mode="Forms">
      <forms loginUrl="~/Test/LogOn" timeout="2880" defaultUrl="~/Test/Index" />
    </authentication>

    <authorization>
      <deny users="?" />
      <allow users="*" />
    </authorization>

如果用户未登录用户将被重定向到登录视图,如果已登录将重定向到索引视图。

于 2013-06-09T03:53:30.863 回答