如何直接调用 ASP.NET Web 窗体项目中另一个 .aspx.cs 或 .ascx.cs 页面中的方法?

问题描述 投票:0回答:1

假设我们有一个 example1.aspx.cs 页面,其中包含一个名为 method1() 的方法,该方法执行某些操作。在 method1() 中,我需要调用位于不同页面中的另一个直接名为 method2() 的方法,例如 example2.aspx.cs 或 example2.ascx.cs (用户控件)。 如何在 ASP.NET Web 窗体项目中实现这一目标?

我尝试过...

example2.this.page.method2();

但它不起作用。

c# asp.net webforms
1个回答
0
投票

好吧,这就引出了一个问题:如果给定网页中有“一些”代码,两个页面现在都需要共享?

然后您应该将给定的“共享”代码移至公共库类,然后两种形式都可以自由调用该共享代码。

此外,考虑到 .net 中的几乎所有代码都是一个类,那么您当然需要该类的一个实例,然后才能调用或使用此类代码。那么,实际上这是如何工作的?

你的问题就变成:

如何在班级中共享和调用一些代码?

好吧,您可以将代码标记为静态,从而无需首先创建该类的实例。另一种方法是在代码中创建该页面的实例,然后调用该方法。但是,由于页面不太可能已经加载,因此创建该页面类的整个实例有点矫枉过正,更糟糕的是,许多(如果不是全部)页面类事件(例如页面加载等)将运行,而您不需要大多数情况下不希望这样。

因此,最好的建议是将代码移出页面,现在两个页面都可以调用该公共库例程。

但是,如果出于某种奇怪的原因您想将代码保留在该页面类中,则将代码标记为静态。

所以,假设在 MyPage1 中我想调用并使用 MyPage2 中的一些代码。

所以,在MyPage2中,我们可以说这个方法将摄氏温度转换为华氏温度。

因此,在网页MyPage2中,我们有这样的代码:

    public static decimal CtoF(decimal c)
    {
        // convert passed celisus tempature value
        // to Fahrenheit

        decimal MyResult = (c * 1.8m) + 32;
        return MyResult;

    }

所以,现在在第 1 页,我可以有这个标记:

        <h3>Enter Celsius value</h3>
        <asp:TextBox ID="txtC" runat="server" TextMode="Number"></asp:TextBox>

        <br />
        <br />
        <asp:Button ID="cmdConvert" runat="server" Text="Convert to F"
            OnClick="cmdConvert_Click"
            />
        <br />

        <h3>Fahrenheit Value</h3>

        <asp:TextBox ID="txtF" runat="server"></asp:TextBox>

第 1 页后面的代码是这样的:

    protected void cmdConvert_Click(object sender, EventArgs e)
    {
        decimal C = Convert.ToDecimal(txtC.Text);
        decimal F = MyPage2.CtoF(C);      // call code routine in MyPage2

        txtF.Text = F.ToString("0.00");
    }

结果是这样的:

但是,如上所述,由于理论上两个页面都需要共享此类代码,因此最好将需要共享的代码和方法移出第二个页面,并将此类代码放置在共享类中,作为全局的,以便所有页面都可以共享这些代码。页面和所有代码都可以自由使用。

© www.soinside.com 2019 - 2024. All rights reserved.