在不同的类之间传递值

本文关键字:之间 | 更新日期: 2023-09-27 18:28:07

我有两个独立的类:一个在tbIndexUI.aspx页面中,另一个在regular.cs类文件中。我想将两个数据成员从常规的.cs类文件传递到.aspx页面,但是每次"page_Load"方法触发时,它都会重置以前传递的所有值。我试着注释掉"Page_Load"中的所有内容,我的事件甚至一起删除了该方法,但参数值仍在重置中。

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

我的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;
    }
 }

我的常规类处理.cs 的代码

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

在不同的类之间传递值

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

不要让类库类具有网页类的实例。相反,您希望.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中,它就可以在页面回发中持久存在。