如何从会话状态获取具有id的对象列表并在下拉列表中显示它?

时间:2016-04-26 18:57:02

标签: c# asp.net-mvc drop-down-menu ado.net-entity-data-model

我在数据库中有2个表

Subject(subjID, subjName, tchID)
Teacher(tchID, tchName)

如何从Sesstion状态获取tchID值的主题列表并在dropdownlist中显示? 我的控制器:

 public ActionResult GetListSubj()
    {
        db = new DatabaseMng();
        Teacher tch = db.Teachers.Find(Session["tchID"].ToString());
        ViewBag.subjID = new SelectList(db.Subjects, "subjID", "subjName");
        return View();
    }

在视图中:

...

@Html.DropDownList("subjID", String.Empty)

这是我的代码,它不完整,因为它返回所有主题,但我希望主题在登录视图中具有来自会话状态的tchID

[HttpPost]
    public ActionResult Login(Teacher model, FormCollection f)
    {
        db = new DatabaseMng();
        string id = f["txtID"];
        string pw= f["txtPass"];
        if (ModelState.IsValid)
        {            
                Session["tchID"] = id;
                return RedirectToAction("GetListSubj", "Teacher"); 
        }
        return View();
    }

1 个答案:

答案 0 :(得分:1)

目前,您正在使用SelectList创建db.Subjects对象,这是Subject表中的所有项目。

查询db.Subjects时包含where子句。您可以将session的值用于where子句。

var idFromSession = string.empty;
if (Session["tchID"] != null)
{
    idFromSession = Session["tchID"].ToString();
}
var filterdSubjects = db.Subjects.Where(s=>s.tchID == idFromSession);
// Use filterdSubjects  to build your dropdown.

假设tchID属性是字符串类型。如果是数字类型( Int32 / Int64 ),请将会话值转换为数字类型,并在where子句中使用它。

var idFromSession = 0;
if (Session["tchID"] != null)
{
    idFromSession = Convert.ToInt32(Session["tchID"]);
}
var filterdSubjects = db.Subjects.Where(s=>s.tchID==idFromSession);

您可能还会考虑切换到更强大的strongly typed approach which uses view models来从您的​​操作方法传输数据,而不是依赖于ViewBag / ViewData等动态内容。