0

Ich habe 2 Tabellen in der DatenbankWie bekomme ich eine Liste von Objekten die ID vom Sitzungsstatus haben und zeige sie in Dropdownliste an?

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

Wie Liste der Themen erhalten, die tchID Wert von Sesstion Zustand haben und zeigen es in dropdownlist? Mein Controller:

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

In Ansicht:

...

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

Das ist mein Code ist, dann ist es nicht vollständig, weil es alle Themen zurückkehren, aber ich möchte Themen haben tchID aus Sitzungsstatus in Anmeldungsansicht:

Antwort

1

Derzeit erstellen Sie t Er SelectList Objekt mit db.Subjects, die alle Elemente in der Tabelle Thema ist.

Schließen Sie eine Where-Klausel bei der Abfrage db.Subjects ein. Sie können den Wert aus der Sitzung für Ihre WHERE-Klausel verwenden.

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. 

Unter der Annahme, tchID Eigenschaft ist der String-Typ. Wenn es ein numerischer Typ ist (Int32/Int64), wandeln Sie Ihren Sitzungswert in einen numerischen Typ um und verwenden Sie diesen in Ihrer WHERE-Klausel.

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

Sie könnten auch strongly typed approach which uses view models zu einem robusteren wechseln betrachten Daten aus den Aktionsmethoden zu übertragen und nicht zu sehen, als wie ViewBag/Viewdata auf dynamischen Sachen zu verlassen.

+1

Vielen Dank. – Sherry

+0

Aber was ist mit View? Weil es ein Fehler ist: LINQ to Entities erkennt die Methode 'System.Object get_Item (System.String)' nicht und diese Methode kann nicht in einen Speicherausdruck übersetzt werden. – Sherry

+0

Lesen Sie die Session-Wert-Seite dieses linq-Ausdrucks zu einer Variablen (wie im zweiten Beispiel) und verwenden Sie diese. – Shyju

Verwandte Themen