|
https://technet.microsoft.com/en-us/library/ms143221(v=sql.105).aspx |
Анатомия ASP .NET. ASP .NET в действии
Проект на двух языках
Проект 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"/>
<add directoryName="CSCode"/>
</codeSubDirectories>
</compilation>
...
</system.web>
</configuration>Директивы
На каждой странице aspx обычно задаются директивы, с помощью которых Вы можете контролировать поведение страницы. Можно считать их языком, на котором вы общаетесь с компилятором, указывая ему, как обрабатывать данную страницу. Директивы обычно помещают в начале файла. Мы уже встречались с директивой Page в "Что такое ASP .NET" .
Синтаксис объявления директив такой:
<%@ [Directive] [Attribute=Value] %>
Можно объявить несколько директив одновременно:
<%@ [Directive] [Attribute=Value] [Attribute=Value] %>
В ASP .NET 2.0 существует 11 директив.
Пока что подробно рассмотрим Page и Import.