(已编辑)我想模仿"用户角色"的功能。
登录时,用户将输入他们的用户名和密码,然后,使用同一页面上的下拉列表,选择一个项目(角色),单击"登录"按钮,如果成功,将被定向到特定页面。
因此,如果用户在下拉列表中选择"管理员"项,则应将其重定向到"_AdminLanding"..和如果项目"学生",则重定向到"_StudentLanding"。如果项目"导师",重定向到"_TutorLanding"
我的代码如下:
型:
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"。目前,它重定向到"登录"页面,因为我还不想更改它
基本上,这是您希望发生的事情:
- 单击按钮(登录)时,验证用户名和密码。
- 如果验证失败,请返回到 1。否则,请检查下拉列表中选择的当前项目。
- 如果下拉列表等于 x,并且用户在角色 x 下,则将用户重定向到表单 x.否则,如果下拉列表等于 y,并且用户在角色 y 下,则将用户重定向到表单 y。
希望您能以这种方式了解解决方案的流程。
另外,我建议您应该有一个"角色"列或实体来标识登录用户的角色,而无需下拉列表提示。由于根据您所描述的内容,只要用户具有在您的应用程序上输入的有效凭据,任何注册用户都能够访问任何特定角色。
我认为您可能正在寻找的是选择要在身份验证后加载的视图。您能否澄清"重定向"时的预期结果?
使用 MVC 4 从控制器调用另一个不同的视图 ASP.NET
接受的答案是返回一个新的视图或部分视图对象。
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);