如果你必须在asp.net,aspx.cs和一个简单的.cs类中的两个类之间传递一个值,并且值必须在整个用户的会话中出现,你会怎么做? 第二个类使用ViewState,我想从C1.cs改变类C2.aspx.cs的ViewState [" VARIABLE1"]的值,这是可能的,怎么样? C1没有C1.aspx(它不是用户控件,而是一个简单的类。谢谢你的建议。
答案 0 :(得分:1)
这是关键:
该值必须存在于整个用户的会话中
显然,变量的主要部分应该在会话中:
Session["VARIABLE1"]
但是,我也看到了这一点:
我想从C1.cs改变C2.aspx.cs类的ViewState [" VARIABLE1"]的值
我建议重新思考C1.cs
使用更实用的风格。在那里设计类,而不是像这样的东西:
void C1Function()
{
if (Session["VARIABLE1"] == "value")
Session["VARIABLE1"] = somevalue;
}
///...
class C2
{
void Page_Load(object sender, EventArgs e)
{
C1TypeInstance.C1Function();
}
}
你最终会得到更像这样的代码:
string C1Function(sting VARIABLE1)
{
if (VARIABLE1== "value")
return somevalue;
return VARIABLE1;
}
///...
class C2
{
void Page_Load(object sender, EventArgs e)
{
Session["VARIABLE1"] = C1TypeInstance.C1Function(Session["VARIABLE1"]);
}
}
或者像这样:
public class C1
{
private string variable1;
public C1(string VARIABLE1)
{
variable1 = VARIABLE1;
}
string C1Function()
{
if (variable1 == "value")
variable1 = somevalue;
return variable1
}
}
///...
class C2
{
void Page_Load(object sender, EventArgs e)
{
var C1TypeInstance = new C1(Session["VARIABLE1"]);
Session["VARIABLE1"] = C1TypeInstance.C1Function();
}
}
或者像这样:
static string C1Function(sting VARIABLE1)
{
if (VARIABLE1== "value")
return somevalue;
return VARIABLE1;
}
///...
class C2
{
void Page_Load(object sender, EventArgs e)
{
Session["VARIABLE1"] = C1Type.C1Function(Session["VARIABLE1"]);
}
}
如果所有其他方法都失败了,您可以在会话中存储C1类型的整个实例,如下所示:
public class C1
{
public string VARIABLE1 {get; set;}
}
///...
class C2
{
void Page_Load(object sender, EventArgs e)
{
Session["VARIABLE1"] = Session["VARIABLE1"] ?? new C1();
((C1)Session["VARIABLE1"]).VARIABLE1 = "somevalue";
}
}