这看起来应该很简单,但我想不通。我正在尝试在页面隐藏代码和继承页面类的类之间共享代码。
重要的一点是,我需要 Class 继承 Page 类,因为我将使用仅(我认为)与 Page 类一起工作/在 Page 类上工作的对象和方法。例如,我将使用“响应”和“会话”对象。稍后我将使用其他页面对象和方法(例如 GridView、Panels 等)。我想将公共页面相关代码保存在共享类中。
下面的示例代码。
我的测试页。代码隐藏页面指的是共享类中的函数。当我加载此页面时,它在引用“响应”对象的第一行抛出错误(表示它未声明并且不能在此上下文中使用)。
MyTestPage.aspx.vb:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="MyTestPage.aspx.vb" Inherits="MyTestPage" %>
<!DOCTYPE html>
<html lang="en">
<head>
<title>My Test Page</title>
</head>
<body>
<form id="form1" runat="server" class="container-fluid">
<p>My Test Page</p>
</form>
</body>
</html>
MyTestPage.aspx.vb:
Partial Class MyTestPage
Inherits System.Web.UI.Page
Dim sMYSHAREDCLASS As New Class1
Private Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
If sMYSHAREDCLASS.MyTestFunction = True Then
Response.Write("hello")
End If
End Sub
End Class
班级。这是共享类的共享代码。我喜欢使用将在多个页面上使用的 Page 对象和方法。
Public Class Class1
Inherits System.Web.UI.Page
Function MySharedTestFunction() As Boolean
Response.Buffer = True
Session("MySession") = False
Return (True)
End Function
End Class
嗯,你正在创建一个类的新实例。
它不能继承其他不存在的东西,或者使用其他类的东西,包括页面类,除非你告诉它!!!!
所以,类的某些实例不能突然使用/享受/触摸/使用或具有当前页面的上下文,因为如果我在浏览器中打开 5 个页面,那个当前页面是什么????
因此,您需要创建该类以同时传递它应该处理的页面。
此外,此要求不称为继承,您根本不需要,也根本不在这里使用继承!!!@!
所以,你的页面类可以是这样的:
Public Class Class1
Dim MyPage As Page
Public Sub New(MePage As Page)
MyPage = MePage
End Sub
Public Function MySharedTestFunction() As Boolean
MyPage.Response.Buffer = True
MyPage.Session("MySession") = False
Return (True)
End Function
End Class
现在,您的网页代码将是这样的:
Dim cMyPage As New Class1(Me)
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
所以,当我们创建 class1 的“实例”时,我们同时也简单地传递了我们正在处理的当前页面(我)。
所以,现在,任何代码,网页代码后面的任何地方都可以去:
cMyPage.MySharedTestFunction()
所以那个类根本不需要继承任何东西。它所需要的只是对最初创建该类的网页的工作引用。
现在,在该类中,您可以使用 MyPage 引用该页面并在该页面上执行任何操作。