В повседневной работе мы часто используем application layout страницы (aspx страницы, которые расположены в папке 12/Templates/Layouts на файловой системе веб сервера) для трассировки и отладки. Это достаточно полезная техника, т.к. вы можете написать серверный скрипт прямо на странице и посмотреть результаты его выполнения на той же странице в контексте запущенного сайта на production сервере. Допустим у нас есть подпапка 12/Templates/Layouts/Test, в которой мы создали простую aspx страницу:
<%@ Page Language="C#" %>
<!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 id="Head1" runat="server">
<title>Test</title>
</head>
<body>
<form id="form1" runat="server">
<% 1: int i = 1;
this.lbl.Text = i.ToString();
<asp:Label ID="lbl" runat="server" />
</form>
</body>
</html>
Обратите внимание на код внутри <%%>. Это очень простой пример, который показывает, как на стороне сервера мы присваиваем значение переменной “i” и отображаем его на странице. В реальности в блоке с серверным кодом будет более полезный код, который будет выводить результаты на страницу (напр. отображение identity текущего пользователя).
К сожалению в этой технике есть небольшой недостаток: по умолчанию мы ограничены использованием C# 2.0 и не можем использовать многие полезные возможности C# 3.0 (полный список см. здесь: Overview of C# 3.0). Так например, если вместо “int i = 1;” вы напишете “var i = 1;” (см. Implicitly Typed Local Variables), то вы получите следующую ошибку при обращении к вашей странице:
C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS\test\test.aspx(9): error CS0246: The type or namespace name ‘var’ could not be found (are you missing a using directive or an assembly reference?)
at System.Web.Compilation.AssemblyBuilder.Compile()
at System.Web.Compilation.BuildProvidersCompiler.PerformBuild()
…
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Для того чтобы иметь возможность использовать С# 3.0 на layout-страницах необходимо добавить web.config в нашу поддиректорию (12/Templates/Layouts/Test) со следующим содержимым:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<configuration>
<system.codedom>
<compilers>
<compiler
language="c#;cs;csharp"
extension=".cs"
type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089"
warningLevel="4">
<providerOption name="CompilerVersion" value="v3.5"/>
<providerOption name="WarnAsError" value="false"/>
</compiler>
</compilers>
</system.codedom>
</configuration>
В этом файле мы переопределили версию компилятора (см. <providerOption name=»CompilerVersion» value=»v3.5″/>), используемого ASP.Net. После этого вы сможете использовать C# 3.0 на ваших страницах. Эта техника помогла нам писать код для application layout страниц более эффективно. Надеюсь она окажется полезной и для вас.
