如何跨类和代码隐藏访问控件和变量?

时间:2013-03-19 09:56:43

标签: asp.net vb.net class scope code-behind

我有ASP.NET页面,它的代码隐藏和类文件:

  • Folder1 / page.aspx(asp.net页面),它包含label
   <asp:Label runat="server" ID="Label1" Visible="false"></asp:Label>
  • Folder1 / page.aspx.vb(代码隐藏),它会像这样调用connection.vb:
    Dim x As New Connection
    Protected Sub button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles button1.Click
    x.checkusernameExists(TextBoxUsername.Text)
    ' I try to access `Boolean variable` Flag from Class file but I can't.
    End Sub
  • App_Code / connection.vb(我创建的类文件)
    Public Class Connection
       Public Sub checkusernameExists(ByVal username1 As String)
       Dim flag as Boolean
       ' I try to access here `Label1.text` & `Label1.visible` to work on it but I can't.
       End Sub
    End Class


我的问题

1 - 如何从Label1中的ASP.NET page访问Connection.vb

2 - 如何从Boolean variable 中的Connection.vb访问page.aspx.vb(代码隐藏)

我真的被困在这里 谢谢。

3 个答案:

答案 0 :(得分:2)

使用(公共)属性或方法参数。

你必须问自己:为什么一个负责连接的类(我假设数据库)可以访问你的GUI?不要将不同的层彼此硬链接,否则您将无法单独使用它们。

我建议让连接类做它的工作,而不是修改你的前端。相反,控制器(aspx页面)应该管理它的GUI并调用连接类,使用返回值来确定Label下一步该做什么。

因此,请返回Boolean以指示用户是否有效:

Public Class Connection
   Public Shared Function checkusernameExists(ByVal username1 As String)As Boolean
       Dim userExists As Boolean
       ' acces db to check if the username exists '
       Return userExists 
   End Sub
End Class
在您的页面中

Protected Sub button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles button1.Click
    Dim userExists As Boolean = Connection.checkusernameExists(TextBoxUsername.Text)
    Label1.Visible = userExists 
    If Label1.Visible Then Label1.Text = "Hello again " & TextBoxUsername.Text
End Sub

答案 1 :(得分:1)

您可以使用Function返回值并将标签作为参数传递。

Public Function SaveChanges(ByRef Label1 As Label, ByVal username1 As String) As Boolean
{
    Return True
}

如果将标签属性传递给函数而不是在将两个类连接起来时传递标签对象,那会更好。

答案 2 :(得分:1)

将标志设为属性,并将此属性设置为check username Exists function

 Public Class Connection

   Public Property  Flag as Boolean 
   Public Sub checkusernameExists(ByVal username1 As String)

    // set flag here
     Flag = True // or whateever value returned from the database
   ' I try to access here `Label1.text` & `Label1.visible` to work on it but I can't.
   End Sub
End Class

并访问page.aspx.vb文件中的此实例级属性

Dim x As New Connection
Protected Sub button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles button1.Click
x.checkusernameExists(TextBoxUsername.Text)
Label1.Visible= x.Flag;
' I try to access `Boolean variable` Flag from Class file but I can't.
End Sub