(编者) 我想模仿“用户角色”的功能。
登录时,用户将输入用户名和密码,然后使用同一页面上的下拉列表选择一个项目(角色),单击“登录”按钮,如果成功,将被定向到特定页面。
因此,如果用户在下拉列表中选择“Admin”项,则应将其重定向到“_AdminLanding” ..和 如果项目“学生”,重定向到“_StudentLanding”..如果项目“Tutor”,重定向到“_TutorLanding”
我的代码如下:
MODEL:
using System;using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace Tutors.Models
{
public class UserAccount
{
[Key]
public int UserID { get; set; }
[Required(ErrorMessage="First name required")]
public string FirstName { get; set; }
[Required(ErrorMessage = "Last name required")]
public string LastName { get; set; }
[Required(ErrorMessage = "Email required")]
public string Email { get; set; }
[Required(ErrorMessage="Username required")]
public string UserName { get; set; }
[Required(ErrorMessage = "Password required")]
[DataType(DataType.Password)]
public string Password { get; set; }
[Compare("Password",ErrorMessage="Password required")]
[DataType(DataType.Password)]
public string ConfirmPassword { get; set; }
}
登录部分 - 控制器
public ActionResult Login(UserAccount user)
{
using (SchoolContext db = new SchoolContext())
{
var usr = db.UserAccounts.Single(u => u.UserName == user.UserName
&& u.Password == user.Password);
if (usr != null)
{
Session["UserID"] = usr.UserID.ToString();
Session["UserName"] = usr.UserName.ToString();
return RedirectToAction("LoggedIn");
}
else
{
ModelState.AddModelError("", "Username or Password is incorrect");
}
}
return View();
}
我想拥有的用户角色是;导师,管理,学生。 我希望每个用户被重定向到的页面是; “_TutorLanding”, “_ AdminLanding”, “_ StudentLanding”。目前,它被重定向到“LoggedIn”页面,因为我还不想改变它
答案 0 :(得分:0)
基本上,这就是你想要发生的事情:
希望您能够通过这种方式了解解决方案的流程。
另外,我建议您应该使用“角色”列或实体来标识用户登录的角色,而不提示下拉列表。根据您所描述的内容,只要用户在您的应用上输入了有效凭据,任何注册用户都可以访问任何特定角色。
答案 1 :(得分:0)
我认为您可能正在寻找的是选择在身份验证后加载哪个视图。当"重定向"?
时,您能否澄清您的预期结果?Calling another different view from the controller using ASP.NET MVC 4
接受的答案是返回一个新的View或PartialView对象。
return View("NameOfView", Model);
在你进行授权之后。打开下拉值,根据需要返回视图。
switch(dropdownList1.SelectedValue)
{
case "Tutor": return new View("_TutorLanding",Model);
case "Admin": return new View("_AdminLanding",Model);
default:break;
}
或简写代码。
return new View($"_{dropdownList1.SelectedValue}Landing", Model);