登录后无法在母版页中打印用户名文本。错误:无法转换

时间:2017-11-19 14:43:40

标签: c# asp.net

尝试登录后,我无法捕获用户名并将其粘贴到母版页上。错误:无法转换类型为' System.String'的对象输入'会员'。'为什么会这样?我希望能够将用户名打印到标签上的母版页上。但是我被抓住了:无法转换类型为' System.String'的对象。输入'会员'。'

这是我的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";
        }
    }

这是我的LoginForm.aspx.cs

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 participant_username=@participant_username and participant_password=@participant_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.";

        }
    }

我理解删除了会员演员,但是我的代码的另一部分导致错误:

    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");

代码的这一部分是我的购物车形式,如果购物车会话为空,我会使用该成员初始化一个新的购物车。 s.Member =(成员)会议["用户"];扔错了。

2 个答案:

答案 0 :(得分:0)

变化:

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

要:

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

这是因为在按下按钮时,您将会话值设置为来自tbxUserName.Text的字符串值:

 Session["user"] = tbxUserName.Text;

答案 1 :(得分:0)

这就是你使用错误演员的原因。

Session保留一组对象。此集合的对象类型为System.Object。这是.NET中所有对象的基本类型。 因此,您可以在Session中存储任何对象类型。实际上,您存储对象的引用,您可以通过名称(如您所做)或通过数字索引(Session[0]Session[1]等来检索它们。)但是,在读取对象的属性时,其引用存储在Session中,您首先要进行转换,然后尝试访问此属性。在你的情况下,我可以从以下行推断:

 Session["user"] = tbxUserName.Text;

您在user中存储的对象Session的类型是string。所以通过以下演员:

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

你会找回你想要的。