我在数据库中有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();
}
答案 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等动态内容。