使用c#将单个Int从一个用户控件传递到另一个用户控件

本文关键字:控件 用户 一个 另一个 单个 Int 使用 | 更新日期: 2023-09-27 18:08:28

在一个ASPX页面中有两个用户控件。我所要做的就是在页面加载期间将一个int从一个控件传递给另一个控件。

我已经尝试了这里的几个例子,但没有一个工作-对不起,我的意思是我不能让他们工作!这是我得到的:

违约。ASPX

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        ucBottom.varBottomID = ucTop.varBottomID;     
    }
}

UCTOP

public partial class ucTop : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        int varBottomID = 100;
    }
}

UCBOTTOM

public partial class ucBottom : System.Web.UI.UserControl
{
    public int varBottomID { get; set; }
    protected void Page_Load(object sender, EventArgs e)
    {
        BottomText.Text = Convert.ToUInt32(varBottomID).ToString();
    }
}

没有错误,除了底部文本。文本返回0而不是100。也int varBottomID = 100;表示它已被分配但从未使用(ucTop)。

从这里的一个答案来看,一个UC不知道另一个UC并使用父级传递数据是很好的做法。可惜我不喜欢。

一如既往,任何帮助都将是感激的(但在下面的假人指南格式!)。

使用c#将单个Int从一个用户控件传递到另一个用户控件

在您的主页中,它并没有真正改变任何东西-它将ucBottom.varBottomID设置为自身。(编辑:似乎已被修复)

ucTop中,int varBottomID = 100;什么也不做——它在函数内部设置了一个变量,这个变量在函数外部是不可见的。

这两个问题的结果是,你永远不会有任何从ucTopucBottom的沟通。

(顺便说一句,惯例是类名以大写字母开头,实例名以小写字母开头。从代码中很难看出您是试图访问类的静态成员还是实例成员。从这里开始,我假设你有一个ucBottom控件,这是ucBottom类的一个实例,ucTop也是如此。这是唯一的情况下,我看到你的代码,粘贴,将编译没有错误。)

你可能需要类似的东西:

public partial class _Default : Page
{
    protected void Page_Load(sender obj, EventArgs e)
    {
        ucBottom.varBottomID = ucTop.varBottomID; // fix the first issue
    }
}
public partial class ucTop : UserControl
{
     public int varBottomID { get; set; } // fix the second issue
     protected void Page_Load(object src, EventArgs e)
     {
         varBottomID = 100;
     }
}

如果采用这种方法,您还需要选择不同的事件来触发。如果一切都在Load上触发,那么你就有问题了——Load首先在页面上触发,然后在子控件上触发。属性设置不正确。(设置分为三个步骤:ucTop决定要设置的正确值,_Default从上到下设置,ucBottom使用它。你需要这个序列去决定设置使用为了它的工作正确,但如果所有触发加载,你将结束set决定使用set使用决定)。你可以考虑让_Default在LoadComplete上做它的事情,让ucBottom在PreRender上做它的事情。

根据需要修改代码。

public partial class ucTop : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        ucBottom.varBottomID = 100;
    }
}

public partial class ucBottom : System.Web.UI.UserControl
{
    public int varBottomID { get; set; }
    protected void Page_Load(object sender, EventArgs e)
    {
        BottomText.Text = Convert.ToUInt32(varBottomID).ToString();
    }
}

定义一个UserControl可以访问static变量的类:

public static class RequiredVars { public static int BottomID { get; set;} }