2017-11-19 1 views
0
konnte nicht umgewandelt werden.

Nach dem Versuch, mich anzumelden, kann ich meinen Benutzernamen nicht erfassen und ihn nicht auf die Masterseite einfügen. Ein Fehler: Objekt vom Typ 'System.String' kann nicht in 'Member' geschrieben werden. 'Warum ist das so? Ich möchte den Benutzernamen auf die Masterseite auf dem Etikett drucken können. Aber ich werde erwischt mit dem: Kann Objekt vom Typ 'System.String' nicht in 'Member' schreiben. 'Der Benutzername kann nach dem Login nicht in der Masterseite gedruckt werden. Fehler: Objekt des Typs

Das ist mein HomePage.Master.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class HomePage : System.Web.UI.MasterPage 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (Session["user"] != null) 
     { 
      lblUser.Text = ((Member)Session["user"]).Username; 
      lbtnLogin.Text = "Logout"; 
     } 
     else 
     { 
      lblUser.Text = ""; 
      lbtnLogin.Text = "Login"; 
     } 
    } 

Das ist mein LoginForm.aspx.cs ist

protected void btnLogin_Click(object sender, EventArgs e) 
    { 
     /* Allows login to be stored to session*/ 
     SqlConnection con = new SqlConnection(conStr); 

     SqlCommand command = new SqlCommand(); 
     command.Connection = con; 
     command.CommandText = "select * from Participant where [email protected]_username and [email protected]_password"; 
     command.Parameters.AddWithValue("@participant_username", tbxUserName.Text); 
     command.Parameters.AddWithValue("@participant_password", tbxPassword.Text); 

     con.Open(); 
     SqlDataReader rd = command.ExecuteReader(); 
     if (rd.HasRows) 
     { 
      rd.Read(); 
      Session["user"] = tbxUserName.Text; 
      Response.Redirect("default.aspx"); 
     } 
     else 
     { 
      lblOutput.Text = "Invalid username or password."; 

     } 
    } 

verstand ich die Entfernung des Darstellers, aber ein anderer Teil meines Codes Ursachen ein Fehler:

if (Session["cart"] == null) 
    { 
     ShoppingCart s = new ShoppingCart(); 
     s.Member = (Member)Session["user"]; 

     Session["cart"] = s; 
    } 
    ShoppingCart sc = (ShoppingCart)Session["cart"]; 
    sc.Seminar = a; 
    sc.schid = b; 
    sc.Seminar.Speaker = c; 


    Response.Redirect("ShoppingCartForm.aspx"); 

Dieser Teil eines Codes befindet sich in meinem Einkaufswagen-Formular, wenn die Warenkorb-Sitzung ist leer, initialisiere ich einen neuen Einkaufswagen mit dem Mitglied. s.Member = (Mitglied) Sitzung ["Benutzer"]; hat einen Fehler geworfen.

+0

Warum werfen Sie diesen 'UserName' trotzdem in' Member'? Es ist bereits eine Zeichenfolge, die Sie als Zeichenfolge verwenden möchten, und Sie erhalten eine Fehlermeldung, wenn Sie sie in "Member" umwandeln. Also wirklich, warum darauf bestehen? – oerkelens

Antwort

0

Wechsel:

lblUser.Text = ((Member)Session["user"]).Username; 

An:

lblUser.Text = (string)Session["user"]; 

Dies liegt daran, auf die Schaltfläche drücken Sie zum Sitzungswert auf einen String-Wert aus der tbxUserName.Text Einstellung:

Session["user"] = tbxUserName.Text; 
+0

Ich habe versucht, das aber in meiner anderen Seite: Ich bekomme a: Kann nicht Objekt des Typs 'System.String' in den Typ 'Member' zu werfen. ' Diese Seite ist meine List-Seminar-Seite. Besteht aus: if (Session ["Warenkorb"] == null) { ShoppingCart s = new ShoppingCart(); s.Mitglied = (Mitglied) Sitzung ["Benutzer"]; Sitzung ["Warenkorb"] = s; } –

+0

Sieht so aus, als mischst du den Wert, den du in 'Session [" user "] speicherst, entweder einen Wert, der auf all deinen Seiten verwendet wird oder in einem anderen Schlüssel speichert -' Session ["username"] '/ 'Sitzung [" Memeber "]' –

+0

Danke. Ich habe die Frage aktualisiert, um klarer zu sein. –

0

Deshalb verwenden Sie eine falsche Besetzung.

Die Session enthält eine Sammlung von Objekten. Die Art der Objekte dieser Sammlung ist System.Object. Dies ist der Basistyp aller Objekte in .NET. So können Sie in Session beliebigen Objekttyp speichern. Tatsächlich speichern Sie Verweise auf Objekte und Sie können sie entweder durch einen Namen (wie Sie) oder durch einen numerischen Index (Session[0], Session[1], etc.) zurückholen. Allerdings lesen Sie eine Eigenschaft eines Objekts, dessen Referenz in Session Sie gespeichert haben zuerst, um eine Besetzung zu machen und dann versuchen, auf diese Eigenschaft zuzugreifen. In Ihrem Fall, wie kann ich aus der folgenden Zeile folgern:

Session["user"] = tbxUserName.Text; 

die Art des Objekts user Sie in Session speichern ist ein string. So, indem sie die folgende Besetzung:

lblUser.Text = (string)Session["user"]; 

würden Sie abrufen, die Sie wollen.

Verwandte Themen