从简单的cs改变aspx.cs的ViewState

时间:2016-10-04 22:31:24

标签: c# asp.net

如果你必须在asp.net,aspx.cs和一个简单的.cs类中的两个类之间传递一个值,并且值必须在整个用户的会话中出现,你会怎么做? 第二个类使用ViewState,我想从C1.cs改变类C2.aspx.cs的ViewState [" VARIABLE1"]的值,这是可能的,怎么样? C1没有C1.aspx(它不是用户控件,而是一个简单的类。谢谢你的建议。

1 个答案:

答案 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";
    }
}