访问不同文件中webcontrol的C#语法(aspx)

访问不同文件中webcontrol的C#语法(aspx),c#,C#,在我的网站项目中,我有一些aspx页面、javascript文件和一个自定义C#类,我称之为MyCustomReport。我在SelectionReport.aspx中放置了一个ID为Image1的图像框。我需要访问MyCustomReport.cs中的Image1,以便根据条件打开和关闭它。执行此操作需要什么代码?谢谢大家您需要将Image控件的实例传递给MyCustomReport。从那里,您可以将其可见属性设置为真或假 可能是这样的 public partial class Selecti

在我的网站项目中,我有一些aspx页面、javascript文件和一个自定义C#类,我称之为MyCustomReport。我在SelectionReport.aspx中放置了一个ID为Image1的图像框。我需要访问MyCustomReport.cs中的Image1,以便根据条件打开和关闭它。执行此操作需要什么代码?谢谢大家

您需要将
Image
控件的实例传递给
MyCustomReport
。从那里,您可以将其
可见
属性设置为

可能是这样的

public partial class SelectionReport : Page
{
    // your code here

    protected void Page_Load( object sender, EventArgs e ){
        MyCustomReport myCustomReport = new MyCustomReport();
        myCustomReport.MyReport( Image1 );
    }
}

public class MyCustomReport
{
    public void MyReport( Image arg ){
        // some more code
        arg.Visible = false; // or true
    }
}

编辑derek是对的,你不需要整个页面,只需要图像。

这样做听起来有点奇怪。您可以使用ref关键字将控件传递给类方法,然后类可以修改它:

doSomething(data, MyUserControl);

我认为更好的实现是让类拥有一个方法或属性,页面可以查询该方法或属性来打开或关闭控件。

请注意,这听起来像是一个非常奇怪的设计。这听起来不太正确,为什么您的报表会更改您的网页?surley你不能同时呈现你的报告和网页。你的页面应该负责打开和关闭自己的东西,你的报告类应该只返回数据(最好足够告诉页面该做什么)。这减少了两个类之间的耦合。顺便说一句……如果这与你的另一个问题()有关,你就走错了方向。请记录在案,我对这个问题投了赞成票。你把显示逻辑和业务逻辑混为一谈,把代码搞得一团糟。将每个类或页面视为一个自治单元。当然,您必须在类之间进行接口(这是重点,是吗?),但您只需要在它们之间进行接口。您不必通过启动闪烁系统来操控汽车,也不必打开机油盖来解锁行李箱。将不同的系统分开。打开和关闭图像在页面上的概念位置。@derek:为什么需要通过引用传递它?他只需要更改对象的属性,而不是更改对象本身。要清除这些内容,MyUserControl将是Image1控件,而不是整个页面。这将允许他访问对象以更改其属性。与传递SelectionReport实例没有太大区别,只是缩小了发送的引用范围。同意。基本上,您的建议基本上实现了我的第二点,即将其作为页面可以查询的属性或方法。我甚至会进一步简化它:Image1.Visible=MyCustomReport.MyReport(),并返回bool。正确的,我想我的关键字弄错了,在我的示例中,out肯定是更好的解决方案。您好-您上面发布的代码是否需要进入类似SelectionReport.aspx.cs的内容?我还没有一个cs类,但可以创建一个。@Josh:第一个类是的,第二个类不是。我只是把这两个类放在一起来说明一点。当你向项目中添加一个新页面时,VisualStudio不是为你生成了一个类吗?正在尝试实现你的代码,但是有一个小问题(我正在学习,抱歉)。我创建了一个名为SelectionReport.aspx.cs的文件,并添加了对相应程序集的引用,然后在类的顶部声明了它。接下来,我添加了页面加载,在第一行,MyCustomReport中的名称空间是CustomReports,因此我声明CustomReports.MyCustomReport RP=new CustomReports.MyCustomReport();在第二行中,我尝试了RP。但是intellisense没有显示我的CustomReport,或者我在这里查找错误的内容。我错过了什么?@Josh:你应该读一下,它更详细地介绍了文件背后的代码是如何工作的等等。