2016-04-26 59 views
0

我在數據庫2個表如何從會話狀態獲取具有id的對象列表並將其顯示在下拉列表中?

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

當前您正在創建t他SelectList對象使用db.Subjects這是主題表中的所有項目。

查詢db.Subjects時包含where子句。您可以使用來自會話的值來處理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的動態的東西。

+1

非常感謝。 – Sherry

+0

但是View怎麼樣?因爲它是錯誤的:LINQ to Entities不能識別方法'System.Object get_Item(System.String)'方法,並且此方法不能轉換爲存儲表達式。 – Sherry

+0

將該linq表達式外的Session值讀取到一個變量(就像我在第二個例子中那樣)並使用它。 – Shyju

相關問題