从mvc中的下拉列表中获取ID值

时间:2013-07-23 20:54:24

标签: c# asp.net-mvc

总体情况是这样的:当用户登录时,他们可以从下拉列表中选择一个“组织”来登录,该列表具有每个组织的唯一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");
        }
    }

这是我的ViewModel:

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

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

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

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:-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最终获得了正确的值,它表示" model"的值。不再是空的。虽然这有效,但我并不完全确定原因,因为我认为使用ViewModel会做同样的事情,因为我的ViewModel包含了Organizations模型。

编辑:我弄清楚为什么这样做起来并且使用ViewModel似乎没有:在我看来我有

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

第一个参数"组织"在我的模型中没什么,所以模型当然会返回null而不是给我ID。当我把它改为:

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

它传回了身份证,我很高兴。