Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何跨类和代码隐藏访问控件和变量?_Asp.net_Vb.net_Class_Scope_Code Behind - Fatal编程技术网

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

Asp.net 如何跨类和代码隐藏访问控件和变量?,asp.net,vb.net,class,scope,code-behind,Asp.net,Vb.net,Class,Scope,Code Behind,我有一个ASP.NET页面,它的代码隐藏在后面,还有一个类文件: Folder1/page.aspx(asp.net页面),它包含一个标签: Folder1/page.aspx.vb(代码隐藏),它调用connection.vb的方式如下: Dim x作为新连接 受保护的子按钮1\u单击(ByVal sender作为对象,ByVal e作为System.EventArgs)处理按钮1。单击 x、 checkusernameExists(TextBoxUsername.Text) '我

我有一个ASP.NET页面,它的代码隐藏在后面,还有一个类文件:

  • Folder1/page.aspx(asp.net页面),它包含一个
    标签

  • Folder1/page.aspx.vb(代码隐藏),它调用connection.vb的方式如下:
Dim x作为新连接
受保护的子按钮1\u单击(ByVal sender作为对象,ByVal e作为System.EventArgs)处理按钮1。单击
x、 checkusernameExists(TextBoxUsername.Text)
'我试图从类文件访问'Boolean variable'标志,但无法访问。
端接头
  • App\u Code/connection.vb(我创建的类文件)
公共类连接
公共子检查UsernameExists(ByVal username1作为字符串)
将标志变暗为布尔值
'我试图访问这里的'Label1.text`&'Label1.visible`来处理它,但我不能。
端接头
末级

我的问题 1-如何从
Connection.vb中的
ASP.NET页面
访问
Label1

2-如何从
page.aspx.vb中的
Connection.vb
访问
布尔变量

我真的被困在这里面了。

谢谢。

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

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

最好是将标签属性传递给函数,而不是传递label对象,因为它耦合了两个类。

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

Public Function SaveChanges(ByRef Label1 As Label, ByVal username1 As String) As Boolean
{
    Return True
}
如果您将label属性传递给function,而不是传递label对象,因为它耦合了两个类。

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

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

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

因此,返回一个
布尔值
,以指示用户是否有效:

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
使用(公共)属性或方法参数

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

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

因此,返回一个
布尔值
,以指示用户是否有效:

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

将标志设为属性,并在checkusernameExists函数中设置此属性

 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

将标志设为属性,并在checkusernameExists函数中设置此属性

 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

好的,谢谢你删除C#标记。好的,谢谢你删除C#标记。访问表单级控件的方法不好,会在视图和DataAccessLayer之间创建间接依赖关系,这也违反了告诉不要问的概念。谢谢你,阿迪尔,我不太明白,您的意思是我可以在类文件中使用函数并将其结果返回到代码隐藏文件中的子文件吗?就像Tim的回答一样?不是一种访问表单级控件的好方法会在视图和DataAccessLayer之间创建间接依赖关系,也违反了告诉不要问的概念。谢谢你,Adil,我不太明白,你的意思是我可以在类文件中使用函数并将其结果返回到代码隐藏文件中的子文件吗?就像蒂姆的回答一样?谢谢你这么多时间的解释,真的很有意义。我还了解到,我们可以使用公共共享函数而不是get、set返回一个结果,然后在页面代码中处理结果,如您所述。似乎代码目前不适合我,我可能错过了一些东西。我会发回的。谢谢你这么多时间的解释,真的很有意义。我还了解到,我们可以使用公共共享函数而不是get、set返回一个结果,然后在页面代码中处理结果,如您所述。似乎代码目前不适合我,我可能错过了一些东西。我会发回的。谢谢你Saurabh,这就是我如何从类中访问对象,通过使用属性而不是变量,没有你的帮助我无法知道。谢谢你Saurabh,这就是我如何从类中访问对象,通过使用属性而不是变量,没有你的帮助我无法知道。