0

大图是这样的:当用户登录时,他们可以从下拉列表中选择一个“组织”来登录,每个组织都有一个唯一的 ID #。当用户登录时,我想从我的人员表中获取他们的 ID #。问题是,这个人可能在桌子上两次,像这样:

ID Name     OrgID
1  Brandon  1
2  Brandon  2

因此,要获取适当的人员 ID,我还需要检查 OrgID。这是我的 GET 方法中的内容:

public ActionResult Index()
    {
        ViewBag.Organization = new SelectList(db.Organizations, "OrgID", "OrgName");
        return View();
    }

这是我的 POST 方法:

     [HttpPost, ActionName("Submit")]
    public ActionResult SubmitPost(string LoginNID, string LoginPassword, LoginViewModel model)
    {
        //Create new instance of ActiveDirectoryHelper to access its methods
        ActiveDirectoryHelper login = new ActiveDirectoryHelper();

        //Get Username and Password from forms
        String Username = LoginNID;
        String Password = LoginPassword;
        int OrgID = model.Organizations.OrgID;

        //ViewBag initialization for error message
        ViewBag.NumTimes = 0;
        ViewBag.Message = "Error logging in, please try again.";

        //LDAP Authentication
        bool LoginPassed = login.IsAuthenticated(Username, Password);
        int Organization = organizations.OrgID;

        //if Authentication Success enter site, otherwise Return error message
        if (LoginPassed == true)
        {
            //grabs the one person from the People model whose NID is == to Username
            var peopleModel = db.People.Single(g => g.NID == Username);

            //grabs the peopleID for use in making a session variable
            var peopleID = peopleModel.PeopleID;

            //sets a session variable to be used that is the logged in person's ID
            Session["peopleID"] = peopleID;
            return View("LoginSuccess");
        }

        else
        {
            ViewBag.NumTimes = 1;
            ViewBag.Organization = new SelectList(db.Organizations, "OrgID", "OrgName", organizations.OrgID);
            return View("Index");
        }
    }

这是我的视图模型:

    public class LoginViewModel
{
    public Music.Models.Organizations Organizations { get; set; }
}

关于如何获取组织的 ID # 然后选择唯一的人员 ID # 以便我可以将其设为会话变量的任何想法?非常感谢!

编辑:更新代码以反映我根据提供的答案所做的更改。

4

2 回答 2

2

您可以使用 id 创建一个类似于会话信息的类,以便在登录后立即捕获它。让您的登录名执行登录验证,然后路由到会话信息页面,您可以在其中根据用户可用组织选择组织。将其传递给您的助手类,该类将其存储在会话信息中。

编辑

重新阅读您的问题后,您可以在登录页面提供组织列表,并针对您当前正在执行的任何操作进行验证,并确保它也与组织匹配,因此它只是一个屏幕。

public class LoginCredential
{
    public string UserName { get; set; }
    public string Password { get; set; }
    public int OrganizationId { get; set; }
}

public ActionResult Index()
{
    ViewBag.Organizations = new SelectList(db.Organizations, "OrgID", "OrgName");
    return View();
}

使登录页面的模型成为登录凭据

@model MyProject.Models.LoginCredential

然后,当您从表单提交时,它将传入选定的选项。

[HttpPost, ActionName("Submit")]
public ActionResult Login(LoginCredential credentials)
{    
    String Username = credentials.UserName ;
    String Password = credentials.Password ;
    Int OrganizationId = credentials.OrganizationId;
    ///  Rest of your code goes here
}
于 2013-07-23T20:59:20.487 回答
-1

根据 kadumel 的回答创建 ViewModel 后,我仍然遇到与以前相同的错误。由于用户名和密码都从视图中返回,因此我只需要视图使用 1 个模型来获取 OrgID。我所做的是将我认为的 @model 指令更改为:

@model Music.Models.Organizations

然后将我的 POST 中的参数更改为:

public ActionResult SubmitPost(Organizations model, string LoginNID, string LoginPassword)

从那里,我可以通过这样做获得 OrgID:

int OrgID = model.OrgID;

通过调试,OrgID 终于得到了正确的值,它说“模型”的值不再为空。虽然这可行,但我不完全确定为什么,因为我认为使用 ViewModel 会做同样的事情,因为我的 ViewModel 包含组织模型。

编辑:我知道为什么这是有效的,而使用 ViewModel 似乎没有:在我看来,我有

@Html.DropDownList("Organization", ViewData["Organizations"] as SelectList, "--Select Organization--")

第一个参数“组织”在我的模型中什么都不是,所以模型当然会返回 null 而不会给我 ID。当我将其更改为:

@Html.DropDownList("OrgID", ViewData["Organizations"] as SelectList, "--Select Organization--")

它传回了 ID,我很高兴。

于 2013-07-23T22:19:36.637 回答