2014-02-13 23 views
1

У меня есть код за файлом, который становится слишком большим. Мне нужно разделить на несколько кодов за файлами, которые управляют одной и той же страницей. Я вижу, что это делается с частичными классами в C#, но не в VB. Я попытался реализовать концепцию частичного класса, но он не компилирует или не распознает элементы управления страницей во вторичном файле.VB.NET - Разделить код на несколько файлов

Вот моя страница 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 = «сервер»). Я пробовал это с объявленными пространствами имен, окружающими классы, безрезультатно.

Как я могу разделить мой код за файлом на несколько файлов, чтобы поддерживать разделение?

Update/Edit: 

Мой вопрос такой же, как this question но для VB (не должна быть разница, но как-то там).

+0

У вас есть все те же утверждения импорта в обоих файлах? – Lauren

+4

VS уже выполняет частичный класс, вы можете посмотреть Default.aspx.vb и Default.aspx.designer.vb Если код становится слишком большим, вам может потребоваться создать пользовательские элементы управления или удалить бизнес-логику из ui. –

+0

Это должен быть большой красный мигающий свет со словами «Твоя работа над чем-то неправильным», напечатанная на нем для вас. – asawyer

ответ

0

@the_lotus - Я думаю, что, как упоминалось выше, Kashif, проблема заключается в том, чтобы быть веб-сайтом или веб-приложением. Мой проект настроен как веб-сайт. Веб-приложения объединяются в единую сборку, которая позволяет получить доступ к членам страницы aspx по нескольким файлам. Веб-сайты объединяются в несколько сборок, поэтому члены страницы aspx блокируются в их указанную CodeFile. Я не понимал этого, пока не посмотрел на ваш пример и не заметил, что вы использовали CodeBehind вместо CodeFile. Затем я ссылался на справочную страницу Директивы по MSDN и смотрел разницу между ними. The Web Site vs. Web Application концепция была указана на этой странице. Это заставило меня понять, о чем говорил @ Kashif в вышеупомянутых комментариях.

Короче говоря, мне нужно сделать это в проекте веб-приложений, чтобы это работало. Спасибо за ваши усилия и пример, который вы предоставили. Это было очень полезно!

1

Я только что создал новый веб-проект в VS, создал новый частичный класс для _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 
Смежные вопросы