尝试登录后,我无法捕获用户名并将其粘贴到母版页上。错误:无法转换类型为' 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 =(成员)会议["用户"];扔错了。
答案 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"];
你会找回你想要的。