VB.NET - разделение кода на несколько файлов

У меня есть код файла, который становится слишком большим. Мне нужно разделить код на несколько файлов, которые управляют одной и той же страницей. Я вижу, что это делается с частичными классами в 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:

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


person jobro2013    schedule 13.02.2014    source источник
comment
Есть ли у вас в обоих файлах одинаковые операторы импорта?   -  person Lauren    schedule 14.02.2014
comment
VS уже выполняет частичный класс, вы можете посмотреть Default.aspx.vb и Default.aspx.designer.vb. Если код становится слишком большим, вы можете посмотреть на создание пользовательских элементов управления или удаление бизнес-логики из пользовательского интерфейса. .   -  person the_lotus    schedule 14.02.2014
comment
Это должен быть большой красный мигающий свет с надписью «Вы делаете что-то не так».   -  person asawyer    schedule 14.02.2014
comment
Если вы все еще хотите следовать по тому же маршруту, создайте новый класс, например Default.vb, и ваш класс может иметь что-то вроде Partial Public Class _Default 'Your Methods End Class Это должно работать. Надеюсь, вы не пользуетесь ‹! - - ›за комментарии.   -  person madan    schedule 14.02.2014
comment
@the_lotus - Создание пользовательских элементов управления может помочь, а может и не помочь в ситуации. В любом случае это будет значительная переработка дизайна кода. Если возможно, я бы предпочел найти способ разделить методы класса в отдельные файлы.   -  person jobro2013    schedule 14.02.2014
comment
@asawyer - взорви меня! вы не помогаете!   -  person jobro2013    schedule 14.02.2014
comment
Это проект веб-сайта или проект веб-приложения? Вы можете сделать это в веб-приложении. Я не могу сделать это на веб-сайте, но не знаю почему. Это связано с тем, как компилируются классы веб-сайтов, но я должен это изучить.   -  person Kashif    schedule 14.02.2014
comment
Вы: Мне нужно починить свой велосипед, он продолжает ломаться, прежде чем я смогу съехать со скалы - SO: Не съезжайте со скалы, вы получите травму - Вы: Это не поможет мне исправить рывок велосипеда. Обратите внимание, я не написал свой комментарий в качестве ответа - просто комментарий.   -  person asawyer    schedule 14.02.2014
comment
@Kashif - это проект веб-форм с панелью обновлений. Одна страница с несколькими представлениями, которые включаются / выключаются по мере необходимости для обеспечения переходов с одной виртуальной страницы на другую. Это экспериментальный подход, благодаря которому оно работает как веб-приложение, не загружая страницу за страницей. Конечно, недостатком является то, что весь код программной части находится в одном файле. Мне нужно разделить файл кода программной части, чтобы он не стал слишком большим. Частичные классы должны работать, но это не так.   -  person jobro2013    schedule 14.02.2014
comment
Этот вопрос может помочь Почему я не могу использовать частичное классы на сайте asp.net?   -  person Kashif    schedule 14.02.2014
comment
@Kashif - тесно связанный, но не совсем то, что я ищу. К тому же ответа там до сих пор нет. Спасибо!   -  person jobro2013    schedule 14.02.2014


Ответы (2)


Я только что создал новый веб-проект в 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
person the_lotus    schedule 14.02.2014

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

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

person jobro2013    schedule 17.02.2014