Воспоминание 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.
Всем привет!
Хочу продолжить вспоминать. Сегодня я поиграюсь в логин.
1. Запустим MS Web 2005 Express Edition, нажмём на Datei->Neue Website...:
2. Появится диалог Neue Website, нажмём ASP.NET-Website, выберим язык C# (Visual C#):
3. Вот новый проект:
Теперь дальше. Будем играться в 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. Вуаля, сейчас работает вот так:
Вот полный код 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; } }
1. Теперь дальше. Улучшим код. Добавим в код 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:
Вот полный код 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; } }
Вот так выглядела оригинальная коробка, там 2 DVD, на 1-м DVD там программа Microsoft Web 2005 Express Edition, на-2 DVD там бесплатные картинки и фотографии:
Всем привет! Давно я неигрался в 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. Вуаля! А вот и результат:
Но самый простой способ, если вам не нужно отображать заголовки вот так:
<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: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. Вуаля!
Теперь давайте поиграемся в темы и скины. В 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>
Вуаля! А вот и результат :
<%@ 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" %>
Всем привет, продолжим болтавню про классический 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".
Итак в 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; } }
Через пару минут дальше продолжу.
Теперь хочу поиграться в валидаторы, вспомнить их.
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!
Всем привет! Продолжим играться в 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(); } }
Вуаля! А вот так работает наша программа: