2011-05-25 76 views
0

我在C#的美妙世界中是相当新的,我不知道如何应对这样的问题。C#类之间的值传递

我对Visual Studio 2008的一个.NET网站,我有一个主页,main.aspx(及其以下main.aspx.cs)和游戏页面,game.aspx(也game.aspx.cs)。

在主要类main.aspx.cs我有一个静态变量,private static string _username;和它,一个名为getUsername的方法,只是返回这个值。

现在在我的游戏类中(game.aspx.cs)我有一个事件处理程序,saveButton_Click(),在这个函数中我需要_username的值!

如果有帮助,用户在主页面上启动,然后登录...如果登录有效,然后用户单击链接转至game.aspx页面,则保存变量_username

我看着到内部的关键字,但我不知道如何在这个特殊的例子使用它,或者即使是在这个例子中做正确的事!

+0

,您的静态变量将网页上的所有用户共享......每个用户将被保存到/从变量...你可能想使用会话来代替。 – davidsleeps 2011-05-25 01:38:52

回答

3

添加到您的主页和游戏页面类:

protected string UserName { 
    get { 
     string retVal=string.Empty; 
     if (!string.IsNullOrEmpty(Session["UserName"])) 
      retVal=Session["Username"].ToString(); 
     return retVal; 
    } 
    set{ 
     Session["UserName"]=value; 
    } 
} 

然后从你的代码中访问属性;

+0

创建一个继承“Page”类的类(您将放置该逻辑的地方),然后让您的实际页面从您的自定义类继承,不是更好吗? – 2011-05-25 01:57:10

+0

是的,但我不确定提问者在面向对象方面的专业知识,并不想将他与基类/派生类的东西混淆。 – Dimitri 2011-05-25 01:59:04

+0

老实说总有一个更好的解决方案... – Dimitri 2011-05-25 01:59:46

4

要回答你的问题,你可以在一个单独的类做一个公共静态属性。

然而,

这种模式将可怕的失败(或更糟),当两个人使用你的网站一次。

相反,你应该使用Session State

1

你必须使用Sessions来存储和访问多个页面的值:

//To store value in session variable 
Session["UserName"] = "UserName"; 

//To access the value in the session variable 
String UserName = Session["UserName"]; 

检查详细ASP.NET Session State

0

恕我直言,你可以使用基于窗体的身份验证,然后通过User.Identity.Name获得用户名非常简单。

如果我没有记错