0

我正在开发一个 ASP.NET MVC 4 应用程序,其中我需要每个用户在登录时被重定向到他的自定义页面。用户是从我已重构为单独的类文件的 UserProfile 类中获得的。如何在 ASP.NET MVC 4 Internet 项目的登录(发布)操作中修改重定向到方法以获得此功能?此外,如何将此数据传递给可以显示与此特定用户相关的信息的用户控制器。我正在使用简单的会员资格,因为它在 ASP.NET MVC 4 的 Internet 应用程序模板中开箱即用。

4

1 回答 1

2

我猜你说的是MVC4模板中的这段代码?我正在做一些非常相似的事情 - 登录后,我将用户重定向到控制器下列Index.cshtml出的页面:Account

[HttpPost, AllowAnonymous, ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
     if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, model.RememberMe))
     { 
         return RedirectToAction("Index", "Account");
     }

      // If we got this far, something failed, redisplay form
      ModelState.AddModelError(string.Empty, LocalizedText.Account_Invalid_User_Or_Password);

      return View(model);
}

对于用户特定的数据,为什么不直接扩展文件夹UsersContext.cs中的类Classes,然后用于WebSecurity.CurrentUserId检索与该用户相关的信息?

扩展UsersContext类:

[Table("UserProfile")]
public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }

    public string UserName { get; set; }

    public string Name { get; set; }

    public bool IsPromotional { get; set; }

    public bool IsAllowShare { get; set; }
}

这是他们在登录时被重定向到Index()的控制器上的操作。Account在这里,我只是调用用户上下文,新建一个AccountModel绑定到 Index.cshtml 页面的内容,在模型中设置这些属性,然后使用我们构建的模型返回视图:

public ActionResult Index()
{
   //New up the account model
   var account = new AccountModel();

   try
   {
      //Get the users context
      var CurrentUserId = WebSecurity.CurrentUserId;
      var context = new UsersContext();
      var thisUser = context.UserProfiles.First(p => p.UserId == CurrentUserId);

      //Set the name
      account.Name = thisUser.Name;

      //Set the user specific settings
      account.IsAllowShare = thisUser.IsAllowShare;
      account.IsPromotional = thisUser.IsPromotional;
   }
   catch (Exception exception)
   {
      _logger.Error(exception, "Error building Account Model");
   }
   return View(account);
}

它可能不是您正在寻找的东西,但这应该会让您朝着正确的方向前进。

于 2013-06-17T17:10:08.623 回答