Проект на двух языках
Проект web-сайта состоит из страниц aspx и классов, которые используются на страницах (и, конечно, разнообразных ресурсов). Файлы с классами, к которым можно обратиться из разных страниц, помещают в специальную папку App_Code. При компиляции они помещаются в одну сборку — библиотеку DLL в формате portable executable. Совершенно неважно, на каком языке написан класс, если это язык .NET.
Готовые скомпилированные сборки сторонних производителей тоже можно использовать в проекте. Их помещают в папку Bin. При этом их необходимо импортировать в проект:
<%@ Import Namespace="MyCustomNamespace" %>
Создайте новый проект. Добавьте в него файл, выбрав тип файла Class и язык Visual Basic. Среда сама предложит поместить его в папку Code. Назовем его CustomClass. У него будет очень простой код. Всего одна функция, которая добавляет слово Hello к имени, переданному в качестве параметра:
Imports Microsoft.VisualBasic
Public Class CustomClass
Public Function GetMessage(ByVal name As String) As String Return "Hello, " & name End Function End Class
Добавьте в проект страницу CodeFolder_cs.aspx. Эта страница написана на C#, но она создает класс, написанный на VB .NET:
<%@ page language="C#" %>
<script runat="server">
void Button1_Click(object sender, EventArgs e) { CustomClass c = new CustomClass(); Label1.Text = c.GetMessage(TextBox1.Text); } </script>
<html> <head> <title>ASP.NET Inline Pages</title> </head> <body> <form id="Form1" runat="server"> <h1>Welcome to ASP.NET 2.0!</h1> <b>Enter Your Name:</b> <asp:TextBox ID="TextBox1" Runat="server"/> <asp:Button ID="Button1" Text="Click Me" OnClick="Button1_Click" Runat="server"/> <br /> <br /> <asp:Label ID="Label1" Text="Hello" Runat="server" /> </form> </body> </html>
На странице определена форма, напоминающая форму Windows-приложения. На ней имеется кнопка, нажатие на которую обрабатывается в функции Button1_Click. В ней создается класс и вызывается его функция GetMessage с параметром, который берется из элемента редактирования. Возвращаемое значение записывается в элемент Label1. В более простом варианте это выглядит так:
Label1.Text = "Hello "+TextBox1.Text;
Класс может быть написан на C#, а использоваться из страницы на Visual Basic:
using System; public class CustomClass2 { public String GetMessage(String input) { return "Hello from C# " + input; } } Код страницы CodeFolder_vb.aspx: <script runat="server">
Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Dim c As New CustomClass2 Label1.Text = c.GetMessage(TextBox1.Text) End Sub </script>
Однако поместить в директории App_Code можно только на одном языке. Если там будут находиться файлы на разных языках, проект не будет компилироваться. Для того чтобы использовать два языка, необходимо создать поддиректорию, добавить ее в файл web.config и поместить в нее файлы на другом языке.
Регистрация в файле web.config:
<configuration> <system.web> ... <compilation> <codeSubDirectories> <add directoryName="VBCode"/> </codeSubDirectories> <codeSubDirectories> <add directoryName="CSCode"/> </codeSubDirectories> </compilation> ... </system.web> </configuration>