Воспоминание asp net 12.10.2024
Всем привет! Сегодня хочу вспомнить ASP.NET 2.0. Но прежде чем вспомнить про ASP.NET хочу написать кое-что не по теме. Короче пока лежал в больнице почти 2 месяца купил такие лего журналы, там был конструктор


А вот видео, про журнал лего:
Ну да ладно, давайте поговорим об ASP.NET 2.0. Примерно в 2006 г. я купил компьютерный журнал в обычном магазине, и там был вот такой диск.


Благодаря этому компакт диску с журналом, я начал изучать программирование на ASP.NET 2.0, VB.NET и C#. Покуда я умел программировать на Си, Си++ и Visual Basic 6.0, я легко перешёл на C# и VB.NET, и быстро освоил ASP.NET 2.0. На диске были обучающие видеоуроки по программированию на ASP.NET 2.0, и среда разработки Microsoft Visual Web Developer 2005 Express. Мы как раз и будем играться на Microsoft Visual Web Developer 2005 Express.
Meine Die Formel der LiebeВсем привет!
Хочу продолжить вспоминать. Сегодня я поиграюсь в логин.
1. Запустим MS Web 2005 Express Edition, нажмём на Datei->Neue Website...:

2. Появится диалог Neue Website, нажмём ASP.NET-Website, выберим язык C# (Visual C#):

3. Вот новый проект:

Meine Die Formel der LiebeТеперь дальше. Будем играться в Login.
1. Создастся такой код Default.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_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>Unbenannte Seite</title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
И Default.aspx.cs:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {}
}
2. Дальше добавим элемент управления Login:
<asp:Login ID="Login1" runat="server"> </asp:Login>
3. Добавим событие:
<asp:Login ID="Login1" runat="server" OnAuthenticate="Login1_Authenticate"> </asp:Login>
и код:
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) {
}
4.
Теперь подправим:
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) {
e.Authenticated = false;
}
5. Вуаля, сейчас работает вот так:

Meine Die Formel der LiebeВот полный код Default.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_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>Unbenannte Seite</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Login ID="Login1" runat="server" OnAuthenticate="Login1_Authenticate">
</asp:Login>
</div>
</form>
</body>
</html>
И код Default.aspx.cs:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) { }
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) {
e.Authenticated = false;
}
}
Meine Die Formel der Liebe1. Теперь дальше. Улучшим код. Добавим в код Default.aspx:
Hallo, <asp:LoginName ID="LoginName1" runat="server" /> <asp:Login ID="Login1" runat="server" OnAuthenticate="Login1_Authenticate"> </asp:Login>
И Default.aspx.cs:
protected void Page_Load(object sender, EventArgs e) {
if(!this.Page.User.Identity.IsAuthenticated)
FormsAuthentication.RedirectFromLoginPage(Login1.UserName, Login1.RememberMeSet);
}
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) {
if(Login1.UserName.Equals("mishka") && Login1.Password.Equals("1234"))
e.Authenticated = true;
else e.Authenticated = false;
}
2. UPDATE! Забыл Добавим в Web.config:
<authentication mode="Forms"> <forms defaultUrl="Default.aspx" loginUrl="Default.aspx" slidingExpiration="true" timeout="2880"></forms> </authentication>
2. 3. Вуаля! Давайте введём Username mishka, а пароль 1234:

Meine Die Formel der LiebeВот полный код Default.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_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>Unbenannte Seite</title>
</head>
<body>
<form id="form1" runat="server">
<div>
Hallo, <asp:LoginName ID="LoginName1" runat="server" />
<asp:Login ID="Login1" runat="server" OnAuthenticate="Login1_Authenticate">
</asp:Login>
</div>
</form>
</body>
</html>
И Default.aspx.cs:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {
if(!this.Page.User.Identity.IsAuthenticated)
FormsAuthentication.RedirectFromLoginPage(Login1.UserName, Login1.RememberMeSet);
}
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) {
if(Login1.UserName.Equals("mishka") && Login1.Password.Equals("1234"))
e.Authenticated = true;
else e.Authenticated = false;
}
}
Meine Die Formel der LiebeВот так выглядела оригинальная коробка, там 2 DVD, на 1-м DVD там программа Microsoft Web 2005 Express Edition, на-2 DVD там бесплатные картинки и фотографии:






Meine Die Formel der LiebeВсем привет! Давно я неигрался в ASP NET 2.0, сегодня поиграимся дальше. Сейчас пойдёт речь о поключение к базе данных, и отображение данных из таблицы на сайте. База данных будет подключаться сделанная на Microsoft Access. Чтобы отобразить данные в веб браузере делается это очень просто, нужно два компонента - <asp:AccessDataSource ..> для подключение к базе данных, и <asp:GridView ..> - для отображения данных из базы данных.
1. Вот так выглядет наша база данных и таблица Persony, в которых записаны имя и фамилии Вова Пупкин, Маша Пупина, Дима Попкин, Антон Попов:

2. Напишим вот так:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_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:AccessDataSource ID="accdbPerson" runat="server" DataFile="~/App_Data/db_persony.mdb" SelectCommand="SELECT [PersonID], [Imja], [Familia] FROM [Persony]"></asp:AccessDataSource>
<asp:GridView ID="GridView1" runat="server" DataSourceID="accdbPerson" AutoGenerateColumns="False" DataKeyNames="PersonID">
<Columns>
<asp:BoundField DataField="PersonID" HeaderText="Персона №" />
<asp:BoundField DataField="Imja" HeaderText="Имя" />
<asp:BoundField DataField="Familia" HeaderText="Фамилия" />
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>
3. Вуаля! А вот и результат:

Meine Die Formel der LiebeНо самый простой способ, если вам не нужно отображать заголовки вот так:
<asp:AccessDataSource ID="accdbPerson" runat="server" DataFile="~/App_Data/db_persony.mdb" SelectCommand="SELECT [PersonID], [Imja], [Familia] FROM [Persony]"></asp:AccessDataSource> <asp:GridView ID="GridView1" runat="server" DataSourceID="accdbPerson" AutoGenerateColumns="False" DataKeyNames="PersonID" />
Но тогда в заголовках будут названия полей, в данном случае латинскими буквами:

Meine Die Formel der LiebeТеперь поиграем в менюшечку. Чтобы сделать менюшечку нужно использовать компонент <asp:Menu ...>.
1. Ориентация у менюшечки должно быть горизонтальным т.е. Orientation="Horizontal" см.:
<asp:Menu ID="Menu1" runat="server" Orientation="Horizontal">
2. Вот так добавляем пункты меню в менюшечку Главная страница и Об нас:

3. Вот код:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_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:Menu ID="Menu1" runat="server" Orientation="Horizontal">
<DataBindings>
<asp:MenuItemBinding DataMember="item" />
<asp:MenuItemBinding DataMember="menuitems" />
</DataBindings>
<Items>
<asp:MenuItem Text="Главная страница" Value="Главная страница"></asp:MenuItem>
<asp:MenuItem Text="Об нас" Value="Об нас"></asp:MenuItem>
</Items>
</asp:Menu>
</form>
</body>
</html>4. Вуаля!

Meine Die Formel der LiebeТеперь давайте поиграемся в темы и скины. В ASP.NET WebForms 2.0 есть темы и скины.
1. Тему выберают спомощью параметра Theme="названия скина" см.:
Тема Winter:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Theme="Winter" %>
Тема Sommer:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Theme="Sommer" %>
2. Вот так выглядят подпапки со скинами Winter и Sommer, эти подпапки находятся в папке App_Themes:
3. Вот код:
Winter.skin:
<asp:Label runat="server" BackColor="Darkblue" ForeColor="White" /> <asp:TextBox runat="server" BackColor="White" ForeColor="Darkblue" /> <asp:Button runat="server" BackColor="Darkblue" ForeColor="White" />
Sommer.skin:
<asp:Label runat="server" BackColor="Green" ForeColor="Yellow" /> <asp:TextBox runat="server" BackColor="Yellow" ForeColor="Green" /> <asp:Button runat="server" BackColor="Green" ForeColor="Yellow" />
Default.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Theme="Sommer" %>
<!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:Label ID="Label1" runat="server" Text="Введите ваше имя:"></asp:Label><br />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<br /><br />
<asp:Label ID="Label2" runat="server" Text="Введите вашу фамилию:"></asp:Label><br />
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<br /><br />
<asp:Button ID="Button1" runat="server" Text="Далее" />
</div>
</form>
</body>
</html>
Meine Die Formel der LiebeВуаля! А вот и результат :
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Theme="Winter" %>
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Theme="Sommer" %>

Meine Die Formel der LiebeВсем привет, продолжим болтавню про классический ASP NET WebForms. Как-то я на уроке в колледже вместо того чтобы учиться, учился программированию на ASP NET WebForms. Покуда учителя следили чем мы на уроке занимаемся спомощью Remote Desktop, один из учителей показал всем одноклассникам, что я на уроке играюсь в ASP NET. Вспоминаю мне примерно в 2008 г. подарили веб хостинг на ASP NET 2.0, и поэтому была мотивация изучить ASP NET.
Вот тут см. #9 опечатка там написано так:
<asp:AccessDataSource ID="accdbPerson" runat="server" DataFile="~/App_Data/db_persony.mdb" SelectCommand="SELECT [PersonID], [Imja], [Familia] FROM [Persony]"></asp:AccessDataSource> <asp:GridView ID="GridView1" runat="server" DataSourceID="accdbPerson" AutoGenerateColumns="False" DataKeyNames="PersonID" />
а нужно вот так:
<asp:AccessDataSource ID="accdbPerson" runat="server" DataFile="~/App_Data/db_persony.mdb" SelectCommand="SELECT [PersonID], [Imja], [Familia] FROM [Persony]"></asp:AccessDataSource> <asp:GridView ID="GridView1" runat="server" DataSourceID="accdbPerson" AutoGenerateColumns="True" DataKeyNames="PersonID" />
Т.е. нужно чтобы было AutoGenerateColumns="True".
Meine Die Formel der LiebeИтак в ASP NET 2.0 WebForms очень много компонентов, и можно самому сделать свой компонент. Сегодня поговорим о календареке.
1. Вот код Default.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" UICulture="ru-ru" Culture="ru-ru" %>
<!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:Calendar ID="Calendar1" runat="server" OnSelectionChanged="Calendar1_SelectionChanged"
OnDayRender="Calendar1_DayRender"></asp:Calendar>
<br />
<asp:Label ID="Label1" runat="server" Text="Label" ForeColor="Red">
</asp:Label>
</div>
</form>
</body>
</html>
2. Вот код Default.aspx.cs:
using System;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {
Label1.Text = "";
}
protected void Calendar1_SelectionChanged(object sender, EventArgs e) {
if (Calendar1.SelectedDate.Year == 2025 && Calendar1.SelectedDate.Month == 1 && Calendar1.SelectedDate.Day == 1)
Label1.Text = "С НОВЫМ 2025 ГОДОМ!";
else if(Calendar1.SelectedDate.Year == 2024 && Calendar1.SelectedDate.Month == 12 && Calendar1.SelectedDate.Day >= 24 &&
Calendar1.SelectedDate.Day <= 25)
Label1.Text = "С РОЖДЕСТВОМ!";
else if (Calendar1.SelectedDate.Year == 2024 && Calendar1.SelectedDate.Month == 12 && Calendar1.SelectedDate.Day >= 26 &&
Calendar1.SelectedDate.Day <= 31)
Label1.Text = "С НАСТУПАЮЩИМ 2025 ГОДОМ!";
else
Label1.Text = "";
}
protected void Calendar1_DayRender(object sender, DayRenderEventArgs e) {
if(e.Day.Date.Month == 12 && e.Day.Date.Year == 2024 && e.Day.Date.Day >= 24
&& e.Day.Date.Day <= 25) e.Cell.ForeColor = System.Drawing.Color.Red;
if(e.Day.Date.Day >= 31 && e.Day.Date.Month == 12
&& e.Day.Date.Year == 2024) e.Cell.ForeColor = System.Drawing.Color.Red;
if(e.Day.Date.Month == 1 && e.Day.Date.Year == 2025 && e.Day.Date.Day == 1)
e.Cell.ForeColor = System.Drawing.Color.Red;
}
}
Через пару минут дальше продолжу.
Meine Die Formel der Liebe3. Вуаля! А вот так наш календарек работает:

Meine Die Formel der LiebeТеперь хочу поиграться в валидаторы, вспомнить их.
1. Вот есть такой код:
Default.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_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>
<div id="frmField" runat="server">
<asp:Label ID="lbLastname" runat="server" Text="Фамилия:"></asp:Label><asp:RequiredFieldValidator
ID="rqfvLastname" runat="server" ErrorMessage="Введите вашу фамилию"
ControlToValidate="txtLastname" SetFocusOnError="True"></asp:RequiredFieldValidator><br />
<asp:TextBox ID="txtLastname" runat="server"></asp:TextBox>
<br /><br />
<asp:Label ID="lbFirstname" runat="server" Text="Имя:"></asp:Label>
<asp:RequiredFieldValidator
ID="rqfvFirstname" runat="server" ErrorMessage="Введите ваше имя"
ControlToValidate="txtFirstname" SetFocusOnError="True"></asp:RequiredFieldValidator><br />
<asp:TextBox ID="txtFirstname" runat="server"></asp:TextBox>
<br /><br />
<asp:Label ID="lbBirthday" runat="server" Text="Дата рождения:"></asp:Label>
<asp:RequiredFieldValidator ID="rqfvBirthday" runat="server" ControlToValidate="txtBirthday"
ErrorMessage="Введите вашу дату рождения" SetFocusOnError="True"></asp:RequiredFieldValidator><br />
<asp:TextBox ID="txtBirthday" runat="server"></asp:TextBox>
<br />
<br />
<br />
<br />
<asp:Button ID="btnSave" runat="server" Text="Сохранить" OnClick="btnSave_Click" />
</div>
<div id="frmResult" runat="server">
</div>
</div>
</form>
</body>
</html>
Default.aspx.cs:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {
this.frmField.Visible = true;
this.frmResult.Visible = false;
}
protected void btnSave_Click(object sender, EventArgs e) {
this.frmField.Visible = false;
this.frmResult.Visible = true;
Label l = new Label();
l.Text = "Здравствуйте " + this.txtFirstname.Text + " " + this.txtLastname.Text + ", Вы родились " + this.txtBirthday.Text + ". Всё успешно сохранино!";
l.Font.Bold = true;
this.frmResult.Controls.Add(l);
}
}2. Вуаля! А вот и результат:

За это я обожаю ASP NET WebForms!
Meine Die Formel der LiebeВсем привет! Продолжим играться в ASP NET 2.0 WebForms. Сегодня прочитаем и запишим данные в базу данных.
Вот код Default.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_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:AccessDataSource ID="AccessDataSource1" runat="server" DataFile="~/App_Data/db_persony.mdb"
InsertCommand="INSERT INTO Persony(Imja, Familia) VALUES (?,?)" SelectCommand="SELECT [PersonID], [Imja], [Familia] FROM [Persony]">
<InsertParameters>
<asp:ControlParameter ControlID="txtFirstname" DbType="String" Name="newparameter"
PropertyName="Text" />
<asp:ControlParameter ControlID="txtLastname" DbType="String" Name="newparameter"
PropertyName="Text" />
</InsertParameters>
</asp:AccessDataSource>
<asp:AccessDataSource ID="AccessDataSource2" runat="server" DataFile="~/App_Data/db_persony.mdb"
SelectCommand="SELECT [PersonID], [Imja] + ' ' + [Familia] AS [Imja_Familia] FROM [Persony]"></asp:AccessDataSource>
Люди:<br />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="PersonID"
DataSourceID="AccessDataSource1">
<Columns>
<asp:BoundField DataField="PersonID" HeaderText="PersonID" InsertVisible="False"
ReadOnly="True" SortExpression="PersonID" />
<asp:BoundField DataField="Imja" HeaderText="Имя" SortExpression="Imja" />
<asp:BoundField DataField="Familia" HeaderText="Фамилия" SortExpression="Familia" />
</Columns>
</asp:GridView>
<br />
Люди:<br />
<asp:DropDownList ID="cboPerson" runat="server" DataSourceID="AccessDataSource2" DataTextField="Imja_Familia" DataValueField="PersonID">
</asp:DropDownList><br />
<br />
<asp:Label ID="lbFirstname" runat="server" Text="Ваше имя:"></asp:Label>
<asp:RequiredFieldValidator ID="reqfvFirstname" runat="server" ControlToValidate="txtFirstname"
ErrorMessage="Введите ваше имя"></asp:RequiredFieldValidator><br />
<asp:TextBox ID="txtFirstname" runat="server"></asp:TextBox><br />
<br />
<asp:Label ID="lbLastname" runat="server" Text="Ваша фамилия:"></asp:Label>
<asp:RequiredFieldValidator ID="reqfvLastname" runat="server" ControlToValidate="txtLastname"
ErrorMessage="Введите вашу фамилию"></asp:RequiredFieldValidator><br />
<asp:TextBox ID="txtLastname" runat="server"></asp:TextBox><br />
<br />
<asp:Button ID="btnSave" runat="server" Text="Сохранить" OnClick="btnSave_Click" /><br />
</div>
</form>
</body>
</html>
Вот код Default.aspx.cs:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {}
protected void btnSave_Click(object sender, EventArgs e) {
AccessDataSource1.Insert();
}
}Вуаля! А вот так работает наша программа:

Meine Die Formel der LiebeВсем привет!
Я оптимизировал код см. Default.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_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:AccessDataSource ID="AccessDataSource1" runat="server" DataFile="~/App_Data/db_persony.mdb"
InsertCommand="INSERT INTO Persony(Imja, Familia) VALUES (?,?)"
SelectCommand="SELECT [PersonID], [Imja], [Familia], [Imja] + ' ' + [Familia] AS [Imja_Familia] FROM [Persony]">
<InsertParameters>
<asp:ControlParameter ControlID="txtFirstname" DbType="String" Name="newparameter"
PropertyName="Text" />
<asp:ControlParameter ControlID="txtLastname" DbType="String" Name="newparameter"
PropertyName="Text" />
</InsertParameters>
</asp:AccessDataSource>
Люди:<br />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="PersonID"
DataSourceID="AccessDataSource1">
<Columns>
<asp:BoundField DataField="PersonID" HeaderText="#" InsertVisible="False"
ReadOnly="True" SortExpression="PersonID" />
<asp:BoundField DataField="Imja" HeaderText="Имя" SortExpression="Imja" />
<asp:BoundField DataField="Familia" HeaderText="Фамилия" SortExpression="Familia" />
</Columns>
</asp:GridView>
<br />
Люди:<br />
<asp:DropDownList ID="cboPerson" runat="server" DataSourceID="AccessDataSource1" DataTextField="Imja_Familia"
DataValueField="PersonID">
</asp:DropDownList><br />
<br />
<asp:Label ID="lbFirstname" runat="server" Text="Ваше имя:"></asp:Label>
<asp:RequiredFieldValidator ID="reqfvFirstname" runat="server" ControlToValidate="txtFirstname"
ErrorMessage="Введите ваше имя" SetFocusOnError="True"></asp:RequiredFieldValidator><br />
<asp:TextBox ID="txtFirstname" runat="server"></asp:TextBox><br />
<br />
<asp:Label ID="lbLastname" runat="server" Text="Ваша фамилия:"></asp:Label>
<asp:RequiredFieldValidator ID="reqfvLastname" runat="server" ControlToValidate="txtLastname"
ErrorMessage="Введите вашу фамилию" SetFocusOnError="True"></asp:RequiredFieldValidator><br />
<asp:TextBox ID="txtLastname" runat="server"></asp:TextBox><br />
<br />
<asp:Button ID="btnSave" runat="server" Text="Сохранить" OnClick="btnSave_Click" /><br />
</div>
</form>
</body>
</html>
Meine Die Formel der LiebeЯ оптимизировал и улучшил код.
Meine Die Formel der LiebeТеперь хочу вспомнить как создавали компоненты В ASP.NET WebForms можно создавать свои веб-компоненты. Мы будем делать кнопочку. В старых версиях HTML делали так кнопочки:
<input type="button" value="Кнопочка" />
или так:
<input type="submit" value="Кнопочка" />
А в современном HTML вот так:
<button>Кнопочка</button>
Чтобы добавить компонент, нужно следующее сделать.
1. Нажмём Website->Neues Element hinzufügen...:
2. Теперь появится диалоговое окно Neues Element hinzufügen: 1. выберем Web-Benutzersteuerelement, 2. назовём элемент ctlButton.ascx, 3. поставим галочку Code in eigener Datei platzieren:
3. Вот код ctlButton.ascx:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ctlButton.ascx.cs" Inherits="ctlButton" %> <button id="btn" runat="server"></button>
4. Вот код ctlButton.ascx.cs:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class ctlButton : System.Web.UI.UserControl {
protected String _Text;
public String Text {
get { return _Text; }
set { _Text = value; }
}
protected void Page_Load(object sender, EventArgs e) {
if(this._Text != null) this.btn.InnerHtml = this._Text;
}
}
5. Вот код Default.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs"
Inherits="_Default" %>
<%@ Register Src="~/ctlButton.ascx" TagName="Button" TagPrefix="cust" %>
<!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>
<cust:Button id="btn1" runat="server"
Text="Наша кнопочка!"></cust:Button>
</div>
</form>
</body>
</html>
6. Вот код Default.aspx.cs:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e){}
}
7. Вуаля! А вот и результат, это наша кнопочка:
Meine Die Formel der LiebeТеперь поговорим о веб сайтах для мобильных устройств. Прежде чем понять о чём идёт речь нужно взглянуть сюда:
WAP, рингтоны воспоминания 28.10.2024
Воспоминание Embedded ч2 27.11.2024
Воспоминания Embedded ч6 15.12.2024
Короче раньше сначало был WAP а потом когда появился Mobile Internet Explorer и iPhone люди могли выходить в интернет. Я лазил через WAP до 2010 г. Вот такие мобильные устройства могли выходить в интернет:


Буду тестировать спомощью этой программой:



Итак погнали.
1. Нужно добавить Mobiles Web Form, и назавём Default.aspx:

2. На выбор тут небольшой список готовых компонентов, мы будем пока пользоваться компонентом Label:

3. Выберем Label, т.е. напишем что-то типа такого Default.aspx:
<%@ Page Language="C#" Inherits="System.Web.UI.MobileControls.MobilePage" %>
<%@ Register TagPrefix="mobile" Namespace="System.Web.UI.MobileControls"
Assembly="System.Web.Mobile" %>
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<body>
<mobile:form id="form1" runat="server">
<mobile:Label ID="lbHelloWorld" Runat="server">Privet mobilka</mobile:Label>
</mobile:form>
</body>
</html>4. Запустим в WAP-эмуляторе я выбрал Nokia 7110:

5. Вуаля! Видим надпись "Privet mobilka":

Meine Die Formel der LiebeВыше всё вспоминал в халявной версии Microsoft Visual Studio 2005 Web Express Edition. На этом вся халява заканчивается. Для следующих воспоминаний нужна будет Visual Studio 2005:
Это коробка

А это DVD диски:


Meine Die Formel der LiebeСейчас я вспомню как я делал воденые знаки в ASP NET 2.0.
Вот есть такая фотка, это моя фотка 2004-2005 гг., я автор фотки, и снимал на мой цифровой фотоаппарат Polaroid PDC3070:

А нужно отобразить картинку и водяные знаки с подписью "(c) uscheswo_82 2004", раз это 2004 год, то пусть и copyright 2004 г. т.е. "(c) uscheswo_82 2004":
1. Чтобы отобразить будем использовать Microsoft Visual Studio 2005. Нажмём Datei->Neu->Website...:
2. Появится диалоговое окно Neue Website, выберем ASP.NET-Website, пусть называется проект WebSite14:
3. Теперь добавим пустую папку:

4. Назовём папку images:
5. Теперь добавим Website->Neues Element hinzufügen, появится диалоговое окно Neues Element hinzufügen, 1)Выберем Web Form, 2)назовём imageview.aspx, т.е. Name:imageview.aspx, 3)уберём галочку Code in eigener Datei platzieren:

6. Вот код:
Default.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_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:Label ID="Label1" runat="server" Text="Пример картинки:" Font-Bold="True">
</asp:Label>
<br />
<asp:Image ID="Image1" runat="server" ImageUrl="~/imagview.aspx" />
</div>
</form>
</body>
</html>
Default.aspx.cs:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {}
}
imageview.aspx:
<%@ Page Language="C#" ContentType="image/jpeg" %>
<%@ Import Namespace="System.Drawing" %>
<%@ import Namespace="System.Drawing.Imaging" %>
<%@ import Namespace="System.Drawing.Drawing2D" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_Load(object sender, EventArgs e) {
Bitmap bmp = new Bitmap(640, 480);
Graphics g = Graphics.FromImage(bmp);
Response.Clear();
g.DrawImage(System.Drawing.Image.FromFile(Server.MapPath("~/images/DSCI3746.jpg")), 0,0);
g.DrawString("(c) uscheswoi_82 2004",
new Font("Courier New", 16, FontStyle.Bold),
new SolidBrush(Color.FromArgb(90, 255, 255, 255)),
new PointF(360, 450));
bmp.Save(Response.OutputStream, ImageFormat.Jpeg);
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Unbenannte Seite</title>
</head>
<body>
<form id="form1" runat="server">
<div></div>
</form>
</body>
</html>
7. Вуаля!

Meine Die Formel der LiebeПолупрозрачность, т.е. полупрозрачные водяные знаки с подписью "(c) uscheswo_82 2004" благодаря статическому методу, первый параметр это альфа канал т.е. прозрачность, вроде бы имхо от 0 до 100, у меня 90 установлено:
Color.FromArgb(90, 255, 255, 255)
Meine Die Formel der LiebeПро халявную версию тут писали см. https://ru.wikipedia.org/wiki/Microsoft_Visual_Studio_Express#Visual_Web_Developer_Express
Microsoft Visual Studio Express — линейка бесплатных интегрированных сред разработки, облегчённая версия Microsoft Visual Studio, разработанной компанией Microsoft, инструмент создания Web-приложений, сайтов, различных веб-сервисов на основе технологии ASP.NET[1]. Согласно утверждению Microsoft, «Express»-редакции предлагают отлаженную, простую в обучении и использовании среду разработки пользователям, не являющимся профессиональными разработчиками ПО, — любителям и студентам.
Visual Web Developer Express является бесплатным инструментом веб-разработки, что позволяет разработчикам использовать продукт для оценки процесса создания и редактирования веб возможностей других Visual Studio 2008 изданий на безвозмездной основе. Её основная функция заключается в создании ASP.NET веб-сайтов. Она имеет интерфейс WYSIWYG, drag-and-drop дизайнер интерфейса пользователя; редакторы расширенного HTML и кода; (ограниченный) проводник баз данных; поддержку других веб-технологий (например, CSS, JavaScript, XML), а также комплексную проверку во время разработки, в том числе и по стандартам XHTML 1.0/1.1 и CSS 2.1.
В VS2005 не хватает некоторых функций, таких как проверка доступности, возможность создать автономную библиотеку классов проекта (которая может быть сделана другим языком конкретного издания Express); расширения поддержки, необходимые для загрузки сторонней надстройки, макросы и некоторые другие функции.
VS2008 Web Developer Express SP1 поддерживает проекты как библиотек классов, так и веб-приложений, которые не поддерживаются в VS2005 Express. Она также включает новый встроенный конструктор HTML на основе Microsoft Expression Web.
а так-же см. https://studfile.net/preview/9209879/page:2/
Visual Studio 2005 Express Edition Новые версии Express предоставляют уникальную возможность обучения разработке программного обеспечения или Web-страниц. Эти продукты предназначены для начинающих пользователей, студентов и для представителей малого бизнеса. Они содержат более доступные и сжатые версии основных продуктов Visual Studio и отличаются от полных комплектов продуктов.
Каждая Express-редакция включает набор учебников, документацию для начинающих и ссылки на общедоступные ресурсы, вроде тематических конференций и форумов. Во время установки можно по выбору загрузить и установить MSDN 2005 Express Edition Library, которая включает полный набор документации по каждому продукту серии Express. Она предназначается в основном для обучения разработчиков, это не совсем традиционная документация MSDN Library. Часть этой документации даже ссылается на видеоматериалы и презентации на сайте MSDN, что весьма ценно.
А какие же ограничения существуют для Express версий? Нет доступа к удаленным данным; эти версии используют только локально установленный источник данных (включая бесплатный продукт SQL Server 2005 Express Edition). Разрабатывать приложения для мобильных устройств в VB Express, Visual C# Express или Visual C++ Express нельзя; необходимо будет обновить их до Visual Studio 2005 Standard Edition, чтобы получить такие возможности. Конечно, отсутствуют все профессиональные возможности версий Visual Studio Team System (см. ниже), например, моделирование приложений и кодов, проверка модулей, статический анализ кода и т.д.
Meine Die Formel der LiebeВсем привет. Теперь вспомним про сессии. В PHP нужно так делать:
session_start(); $_SESSION['var'] = 3; // Чтобы записать echo $_SESSION['var']; // Чтобы прочитать
В ASP NET 2.0 WebForms вот так, спомощью статического класса:
using System;
public static class MySession {
public static int var;
}
MySession.var = 3; // Чтобы записать
Response.Write(MySession.var.ToString()); // Чтобы прочитать
Или вот так, спомощью сессии:
Session["var"] = 3; // Чтобы записать Response.Write(Session["var"].ToString()); // Чтобы прочитать
Meine Die Formel der LiebeПродолжим воспоминания. Сначало продолжу про сессию, а поотом про куки.
Так-же можно так добавить сессию:
Session.Add("var", 3); // Это тоже самое что и Session["var"] = 3;
Meine Die Formel der LiebeКуки хранятся в веб-браузере. Чтобы установит куки, можно 3-мя способами:
Так:
Response.AppendCookie(new HttpCookie("var", "3"));
Так:
Response.Cookies.Add(new HttpCookie("var", "3"));
Или так:
Response.Cookies["var"].Value = "3";
Но чтобы прочитать записанный куки, можно вот так написать:
Response.Write(Response.Cookies["var"].ToString()); // Выводит 3
Или вот так:
Response.Write(Response.Cookies.Get("var").Value.ToString()); // Выводит 3
Meine Die Formel der LiebeЧтобы установить время истекания куки, нужно написать следующее:
Истекает куки для параметра/переменной var, через 30 минут:
Response.Cookies["var"].Expires = DateTime.Now.AddMinutes(30);
Истекает куки для параметра/переменной var, через 2 часа:
Response.Cookies["var"].Expires = DateTime.Now.AddHours(2);
Истекает куки для параметра/переменной var, через 1 день:
Response.Cookies["var"].Expires = DateTime.Now.AddDays(1);
Meine Die Formel der LiebeВсем привет! Продолжим. Короче в ASP NET WebForms не нужно писать так, как пишут в PHP:
Пример index.php:
<!DOCTYPE html>
<html>
<head>
<title>Пример POST</title>
</head>
<body>
<?php if(isset($_POST['firstname']) && isset($_POST['lastname'])): ?>
<?php if($_POST['firstname'] != '' && $_POST['lastname'] != ''): ?>
<h1><?=sprintf('Привет %s %s!', $_POST['firstname'], $_POST['lastname']); ?></h1>
<?php endif ?>
<h1>Привет незнакомец! Добро пожаловать к нам на сайт!</h1>
<?php else: ?>
<h1>Привет незнакомец! Добро пожаловать к нам на сайт!</h1>
<?php endif ?>
<form method="post" action="<?=htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
<label for="firstname">Имя:</label><br>
<input type="text" name="firstname" id="firstname"><br><br>
<label for="lastname">Фамилия:</label><br>
<input type="text" name="lastname" id="lastname"><br><br>
<input type="submit" value="Погнали!">
</form>
</body>
</html>
В ASP NET WebForms нужно напрямую вызывать вот так:
Default.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_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>Пример POST</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h1><asp:Label ID="lbHello" runat="server" Text=""></asp:Label></h1>
<asp:Label ID="lbFirstname" runat="server" Text="Имя:"></asp:Label><br />
<asp:TextBox ID="txtFirstname" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator
ID="rfvFirstname" runat="server"
ErrorMessage="*" ControlToValidate="txtFirstname" SetFocusOnError="True">
</asp:RequiredFieldValidator><br /><br />
<asp:Label ID="lbLastname" runat="server" Text="Фамилия:"></asp:Label><br />
<asp:TextBox ID="txtLastname" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator
ID="rfvLastname" runat="server"
ErrorMessage="*" ControlToValidate="txtLastname" SetFocusOnError="True">
</asp:RequiredFieldValidator><br /><br />
<asp:Button ID="btnGoGo" runat="server" Text="Погнали!" />
</div>
</form>
</body>
</html>
Default.aspx.cs:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page {
private String strHelloAnon = "Привет незнакомец! " +
"Добро пожаловать к нам на сайт!";
private String strHelloName = "Привет {0} {1}!";
protected void Page_Load(object sender, EventArgs e) {
if(!IsPostBack) lbHello.Text = strHelloAnon;
else {
if(txtFirstname.Text.Length > 0 && txtLastname.Text.Length > 0) {
lbHello.Text = String.Format(strHelloName, txtFirstname.Text,
txtLastname.Text);
}
else
lbHello.Text = strHelloAnon;
}
}
}
Вуаля! А вот так работает:

Спомощью IsPostBack проверяем первый раз запускается сайт, или нажали на кнопку Submit т.е. на кнопку "Погнали!". Если первый раз запускается сайт / страница, то IsPostBack = false, если не первый раз, т.е. уже нажали на кнопку Submit т.е. на кнопку "Погнали!" то IsPostBack = true.
Meine Die Formel der LiebeТ.е. чтобы прочесть в PHP делаем так:
echo $_POST['firstname']; // читаем значение из поле firstname echo $_POST['lastname']; // читаем значение из поле lastname
а в ASP NET WebForms делаем вот так:
Response.Write(txtFirstname.Text); // читаем значение из поле firstname Response.Write(txtLastname.Text); // читаем значение из поле lastname
Meine Die Formel der LiebeЧтобы записать в поле в PHP делаем так:
<input name="firstname" id="firstname" type="text" value="<?php ='новое значение'; ?> <input type="text" name="firstname" id="firstname" value="<?php ='новое значение'; ?>
А в ASP NET WebForms делаем вот так:
txtFirstname.Text = "новое значение"; txtLastname.Text = "новое значение";
Meine Die Formel der LiebeОпечатка, надо так:
<input name="firstname" id="firstname" type="text" value="<?php ='новое значение'; ?>"> <input type="text" name="firstname" id="firstname" value="<?php ='новое значение'; ?>">
Meine Die Formel der LiebeВ PHP есть такой массив $_REQUEST, там содержатся $_GET, $_POST, и $_COOKIE.
А в ASP NET нужно чтобы получить параметр писать так Т.е. если мы в браузере напишем так http://localhost/Default.aspx?firstname=Anton&lastname=pop...:
if(Request["firstname"] != null) {
if(Request["lastname"] != null) {
Response.Write(String.Format("Привет {0} {1}!",
Request["firstname"].ToString(),
Request["lastname"].ToString()));
}
}
Вот полный код:
Default.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_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>Пример метод GET</title>
</head>
<body>
<form id="form1" runat="server">
<div>
Нажми на <asp:HyperLink ID="hl1"
NavigateUrl="~/Click.aspx?firstname=Anton&lastname=Popov"
runat="server">эту ссылку</asp:HyperLink>.
</div>
</form>
</body>
</html>
Default.aspx.cs:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {}
}
Click.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Click.aspx.cs" Inherits="Click" %>
<!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>Результат метода GET</title>
</head>
<body>
<form id="form1" runat="server">
<div></div>
</form>
</body>
</html>
Click.aspx.cs:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class Click : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {
if(Request["firstname"] != null) {
if(Request["lastname"] != null) {
Response.Write(String.Format("Привет {0} {1}!",
Request["firstname"].ToString(),
Request["lastname"].ToString()));
}
}
}
}Вуаля!, а вот и результат:

Meine Die Formel der LiebeКороче утром не мог зайти на этот сайт с 5 утра по 8 утра показывала ошибку 500. Короче продолжаю вспоминать. Сегодня речь пойдёт об локализации.
Вот халявная версия Microsoft Web 2005 Express Edition, в меню Extras нет пункта Lokal Resource generieren:
А вот платная версия Microsoft Visual Studio 2005 Standard Edition, и там в меню Extras есть пункт Lokal Resource generieren:
Это нам сейчас и понадобиться.
Есть такой код Default.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_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:Label ID="lbFirstname" runat="server" Text="Имя:">
</asp:Label><br />
<asp:TextBox ID="txtFirstname" runat="server">
</asp:TextBox><br /><br />
<asp:Label ID="lbLastname" runat="server" Text="Фамилия:">
</asp:Label><br />
<asp:TextBox ID="txtLastname" runat="server">
</asp:TextBox><br /><br />
<asp:Label ID="lbBirthday" runat="server" Text="Дата рождения:">
</asp:Label><br />
<asp:TextBox ID="txtBirthday" runat="server">
</asp:TextBox><br /><br />
<asp:Button ID="btnOK" runat="server" Text="OK" />
</div>
</form>
</body>
</html>
Вот так выглядет лейаут:
1. Чтобы добавить в ресурсы текстовку, нужно перейти в Entwurf:
2. Нажмём на меню Extras->Lokale Resource generieren:
См.:

3. 1)Создастся папка App_LocalResources, 2)добавиться файл ресурсов Default.aspx.resx:
4. Теперь код выглядет вот так Default.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default"
Culture="auto" meta:resourcekey="PageResource1" UICulture="auto" %>
<!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:Label ID="lbFirstname" runat="server" Text="Имя:"
meta:resourcekey="lbFirstnameResource1"></asp:Label><br />
<asp:TextBox ID="txtFirstname" runat="server"
meta:resourcekey="txtFirstnameResource1"></asp:TextBox><br /><br />
<asp:Label ID="lbLastname" runat="server" Text="Фамилия:"
meta:resourcekey="lbLastnameResource1"></asp:Label><br />
<asp:TextBox ID="txtLastname" runat="server"
meta:resourcekey="txtLastnameResource1"></asp:TextBox><br /><br />
<asp:Label ID="lbBirthday" runat="server" Text="Дата рождения:"
meta:resourcekey="lbBirthdayResource1"></asp:Label><br />
<asp:TextBox ID="txtBirthday" runat="server"
meta:resourcekey="txtBirthdayResource1"></asp:TextBox><br /><br />
<asp:Button ID="btnOK" runat="server" Text="OK"
meta:resourcekey="btnOKResource1" />
</div>
</form>
</body>
</html>
5. А так выглядет код Default.aspx.resx:
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema id="root" xmlns=""
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnOKResource1.Text" xml:space="preserve">
<value>OK</value>
</data>
<data name="btnOKResource1.ToolTip" xml:space="preserve">
<value />
</data>
<data name="lbBirthdayResource1.Text" xml:space="preserve">
<value>Дата рождения:</value>
</data>
<data name="lbBirthdayResource1.ToolTip" xml:space="preserve">
<value />
</data>
<data name="lbFirstnameResource1.Text" xml:space="preserve">
<value>Имя:</value>
</data>
<data name="lbFirstnameResource1.ToolTip" xml:space="preserve">
<value />
</data>
<data name="lbLastnameResource1.Text" xml:space="preserve">
<value>Фамилия:</value>
</data>
<data name="lbLastnameResource1.ToolTip" xml:space="preserve">
<value />
</data>
<data name="PageResource1.Title" xml:space="preserve">
<value>Пример перевода</value>
</data>
<data name="txtBirthdayResource1.Text" xml:space="preserve">
<value />
</data>
<data name="txtBirthdayResource1.ToolTip" xml:space="preserve">
<value />
</data>
<data name="txtFirstnameResource1.Text" xml:space="preserve">
<value />
</data>
<data name="txtFirstnameResource1.ToolTip" xml:space="preserve">
<value />
</data>
<data name="txtLastnameResource1.Text" xml:space="preserve">
<value />
</data>
<data name="txtLastnameResource1.ToolTip" xml:space="preserve">
<value />
</data>
</root>
Meine Die Formel der Liebe