Воспоминание asp net 12.10.2024
Теперь поговорим о веб сайтах для мобильных устройств. Прежде чем понять о чём идёт речь нужно взглянуть сюда:
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":
Выше всё вспоминал в халявной версии Microsoft Visual Studio 2005 Web Express Edition. На этом вся халява заканчивается. Для следующих воспоминаний нужна будет Visual Studio 2005:
Это коробка
А это DVD диски:
Сейчас я вспомню как я делал воденые знаки в 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. Вуаля!
Полупрозрачность, т.е. полупрозрачные водяные знаки с подписью "(c) uscheswo_82 2004" благодаря статическому методу, первый параметр это альфа канал т.е. прозрачность, вроде бы имхо от 0 до 100, у меня 90 установлено:
Color.FromArgb(90, 255, 255, 255)
Про халявную версию тут писали см. 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 (см. ниже), например, моделирование приложений и кодов, проверка модулей, статический анализ кода и т.д.
Всем привет. Теперь вспомним про сессии. В 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()); // Чтобы прочитать
Продолжим воспоминания. Сначало продолжу про сессию, а поотом про куки.
Так-же можно так добавить сессию:
Session.Add("var", 3); // Это тоже самое что и Session["var"] = 3;
Куки хранятся в веб-браузере. Чтобы установит куки, можно 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
Чтобы установить время истекания куки, нужно написать следующее:
Истекает куки для параметра/переменной 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);
Всем привет! Продолжим. Короче в 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.
Т.е. чтобы прочесть в PHP делаем так:
echo $_POST['firstname']; // читаем значение из поле firstname echo $_POST['lastname']; // читаем значение из поле lastname
а в ASP NET WebForms делаем вот так:
Response.Write(txtFirstname.Text); // читаем значение из поле firstname Response.Write(txtLastname.Text); // читаем значение из поле lastname
Чтобы записать в поле в 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 = "новое значение";
Опечатка, надо так:
<input name="firstname" id="firstname" type="text" value="<?php ='новое значение'; ?>"> <input type="text" name="firstname" id="firstname" value="<?php ='новое значение'; ?>">
В 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())); } } } }
Вуаля!, а вот и результат:
Короче утром не мог зайти на этот сайт с 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>