在不同的类之间传递值

时间:2013-08-18 03:04:44

标签: c# class static-members

我有两个单独的类:1在tbIndexUI.aspx.cs页面中,另一个在regular.cs类文件中。 我想将常规.cs类文件中的两个数据成员传递给.aspx页面,但每次“Page_Load”方法触发时,它都会重置之前传递的所有值。我尝试在“Page_Load”中注释掉所有内容,并且我将事件全部一起移除,但参数值仍在重置。

有没有办法将这些值传递给并维护它们?因为我迷路了,任何例子都会非常有用。我查看了这个[example],但没有成功。

我的aspx.cs页面的代码

public partial class tbIndexUI : System.Web.UI.UserControl
{
    private int _numOfCols = 0;
    private int itemsPerCol = 0;

    public int numColumns
    {
        set
        {
            _numOfCols = value;
        }
    }

    public int itemsPerColumn
    {
        set
        {
            _itemsPerCol = value;
        }
    }
    public static void passData(int numOfCol, int itemsPerCol)
    {
        numColumns = numOfCol;
        itemsPerColumn = itemsPerCol;
    }
 }

我的常规类process.cs的代码

void sendInformation()
{
    tbIndexUI.passData(numOfCols, itemsPerCol);
}

2 个答案:

答案 0 :(得分:1)

public partial class tbIndexUI : System.Web.UI.UserControl
{
    public int numColumns
    {
        set
        {
            ViewState["numOfCols"] = value;
        }
    }

    public int itemsPerColumn
    {
        set
        {
            ViewState["itemsPerCol"] = value;
        }
    }
    public static void passData(int numOfCol, int itemsPerCol)
    {
        numColumns = numOfCol;
        itemsPerColumn = itemsPerCol;
    }

    //when you need to use the stored values
    int _numOfCols = ViewState["numOfCols"] ;
    int itemsPerCol = ViewState["itemsPerCol"] ;
 }

我建议您阅读以下指南,了解在页面和页面加载之间保留数据的不同方法

<强> http://www.codeproject.com/Articles/31344/Beginner-s-Guide-To-View-State

答案 1 :(得分:0)

不要让您的类库类具有网页类的实例。您希望相反,您希望.aspx页面/控件在“常规”.cs文件中包含类的实例,因为这样可以在多个页面中重用它们。

发布代码的方式,sendInformation方法不能与任何其他网页一起使用,因为它使用tbIndexUI控件进行硬编码。

相反,您希望拥有一个类名称的实例(您没有在发布的代码中指明它是否具有sendInformation方法。这样做可以让班级保留numOfColsitemsPerCol值,并通过属性将它们展示给网页/控件。

相反,你可以这样写:

public class TheClassThatHoldsNumOfColsAndItemsPerCol
{
    public int NumOfCols { get; set; }
    public int ItemsPerCol { get; set; }

    // Method(s) here that set the values above
}

现在,在您的aspx代码中,您有一个TheClassThatHoldsNumOfColsAndItemsPerCol的实例,并且只要您将该实例存储在Session缓存或ViewState中,那么它就可以在页面回发中保留。