我可以将aspx页面类传递给子例程吗?

时间:2016-02-25 20:53:03

标签: asp.net vb.net

以下是我想做的事情:假设我有一个名为" foo.aspx"的页面。这个班叫做" foo"。在页面上有一个名为" bar"的复选框。我想要一个子程序来更新该复选框。

所以我想写的是:

在foo.aspx.vb中:

partial class foo
... whatever ...
dim util as new MyUtility
util.update_checkbox(me)

在MyUtility中

public sub update_checkbox(foo1 as foo)
  foo1.bar.checked=true
end sub

但是这并不起作用,因为Visual Studio不接受" foo"作为班级名称。为什么不?是否有一个神奇的命名空间,或者除了说" foo"?

之外我还需要做些什么来识别这个类

(是的,我知道在这个简单的例子中,我可以传入复选框,或者将一行代码移动到aspx.vb等等。我真正的问题是在窗体上设置一些控件,我希望能够在具有子类型的类中执行此操作,因此我可以创建正确子类型的实例,然后只调用一个函数并根据子类型设置所有控件。)

更新

NDJ的答案有效。对于其他任何人来说,让我补充一点,我能够做一些比他的建议更灵活的事情。我能够创建一个返回控件本身的属性,而不是控件的某些属性。即:

public interface ifoo
  readonly property bar_property as literal
end interface

partial class foo
  inherits system.web.page
  implements ifoo

  Public ReadOnly Property bar_property As Literal Implements ITest.bar_roperty
    Get
        ' assuming the aspx page defines a control with id "bar"
        Return bar
    End Get
  End Property
  ...
  dim util=new MyUtility()
  util.do_something(me)
  ...
end class

public class MyUtility
  public sub do_something(foo as IFoo)
    foo.bar_property.text="Hello world!"
    foo.bar_property.visible=true
  end sub
end class

这有点痛苦,因为您必须创建一个接口,然后为您希望能够操作的每个控件创建一个属性,但它似乎确实有效。

如果有办法让aspx类本身公开,那么在大多数情况下这都是不必要的包袱。 (如果您有多个页面具有您希望以相同方式操作的控件,则可能很有价值。)但我无法弄清楚如何操作。

2 个答案:

答案 0 :(得分:1)

你可以做到这一点,但有一些箍可以跳过。 用你的例子...... 如果您创建一个具有布尔属性的接口,然后在您的页面中实现它,那么您可以通过该界面,更改属性将自动更改复选框。即 接口:

Public Interface IFoo
    Property Bar As Boolean
End Interface

实现:

Partial Class _Foo
    Inherits Page
    Implements IFoo

    Public Property Bar As Boolean Implements IFoo.Bar
        Get
            Return Me.CheckBox1.Checked
        End Get
        Set(value As Boolean)
            Me.CheckBox1.Checked = value
        End Set
    End Property

然后一些处理程序只需要接受接口:

Public Module SomeModule

    Public Sub SetValues(foo As IFoo)
        foo.Bar = True
    End Sub
End Module

并且页面中的调用者自行传递:

 Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        SomeModule.SetValues(Me)
 End Sub

答案 1 :(得分:0)

您可以在页面上将复选框公开为公共属性。我不是在VB.net中写的,但在C#中会看起来像这样:

有人可以将其转换为VB.Net吗?

public bool MyCheckBoxSetting
{
    get { return mycheckbox.Checked; }
    set { mycheckbox.Checked = value; }
}