我的代码隐藏文件太大了。我需要在控制同一页面的文件后面分成多个代码。我看到它在C#中用部分类完成,但在VB中没有。我试图实现部分类概念,但它没有编译或识别辅助文件中的页面控件。
这是我的ASPX页面指令:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
以下是Default.aspx.vb文件背后的代码:
Partial Public Class _Default
Inherits System.Web.UI.Page
<!-- methods go here -->
End Class
类_Default变得太大了。我想将它的一些方法移动到单独的文件中,以便于阅读和维护。我尝试用另一个部分公共类_Default创建一个单独的文件。
Partial Public Class _Default
<!--- methods go here -->
End Class
但是,第二个类无法识别Default.aspx上的任何服务器控件(标记为runat =“server”的控件标记)。我已经尝试过围绕类的声明命名空间无效。
如何将文件后面的代码拆分为多个文件以支持分区?
Update/Edit:
我的问题与this question相同,但对于vb(不应该有区别,但不知何故)。
答案 0 :(得分:1)
我刚在VS中创建了一个新的Web项目,为_Default创建了一个新的分部类,我可以轻松访问所有控件。您可能遇到命名空间问题。
Default.aspx的
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="WebApplication2._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="tbTest" runat="server" />
</div>
</form>
</body>
</html>
Default.aspx.vb
Partial Public Class _Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Test()
End Sub
End Class
Default.aspx.Designer.vb
Partial Public Class _Default
Protected WithEvents form1 As Global.System.Web.UI.HtmlControls.HtmlForm
Protected WithEvents tbTest As Global.System.Web.UI.WebControls.TextBox
End Class
新创建的test.vb
Partial Public Class _Default
Public Sub Test()
tbTest.Text = "123"
End Sub
End Class
答案 1 :(得分:0)
@the_lotus - 我认为正如上面提到的@Kashif,问题在于成为一个网站而不是一个Web应用程序。我的项目是作为一个网站设置的。 Web应用程序编译为单个程序集,允许多个文件访问aspx页面成员。网站编译成多个程序集,因此,aspx页面成员被锁定到其指定的CodeFile中。直到我查看你的例子并注意到你使用了CodeBehind而不是CodeFile,我才意识到这一点。然后,我在MSDN上引用了Page Directive手册页,并查看了两者之间的区别。该页面上指定了The Web Site vs. Web Application概念。这让我了解@Kashif在上述评论中所说的内容。
长话短说,我需要将其转换为Web应用程序项目才能实现。感谢您的努力和您提供的示例。这是最有帮助的!