Dnes vám ukážu, jak vytvořit Hello world. Nejdřív vám napíšu kód a pak si jej vysvětlíme:
Tak, a jdeme vysvětlovat:
Vyberete si jazyk, ve kterém chcete programovat, kdybyste si zvolili VB.NET, tak by to
vypadalo takhle:
Dále:
…
Normální html tagy.
Těm, kteří už programovali v nějakém API, to není cizí – label = popisek. Na něj se bude
vypisovat text (pokud ho chceme mít někde umístěný). Každá komponenta v ASP.NET musí
být ukončena, proto tam je .
id="pozdrav"
To je název popisku. Když do něj budeme později chtít něco vypsat, budeme se řídit právě
názvem.
runat="server"
Toto znamená, že skript se má provést na straně serveru, než je ukázán uživateli.
text="HELLO WORLD!"
To je, myslím, jasné, je to text, který se má do popisku vypsat.
Pokud tvoříte v poznámkovém bloku, musíte při ukládání nastavit všechny soubory a jako
název napsat „nazev.aspx“. Potom jen otevřete váš prohlížeč a napíšete
http://localhost/nazev.aspx
Samozřejmě musíte uložit svou stránku do složky InetPub/wwwroot/, která je tam, kam jste ji
umístili při instalaci (nejčastěji na disku C).
Teď si ukážeme něco těžšího, nejdříve v C#:
void ukazPozdrav(object sender, EventArgs e){
pozdrav.Text = "HELLO WORLD!";
}
Hello World v ASP.NET!
Veškerý skript se píše pod výběr jazyka, do tagu opět musíme napsat, že chceme,
aby se vše odehrávalo na straně serveru.
void ukazPozdrav(object sender, EventArgs e)
Když jsme klikli na tlačítko, které mělo odeslat funkci ukazPozdrav(), tak vykonej to, co je ve
složených závorkách.
pozdrav.Text = "HELLO WORLD!";
Nastavíme text popisku na „HELLO WORLD!“.
Tlačítko (button), název je „pozdravit“, popisek bude „pozdrav“ a při kliknutí (onClick)
proveď funkci ukazPozdrav(funkce je definována na začátku skriptu).
A teď ten samý skript ve VB:
Sub ukazPozdrav(sender As Object, e As EventArgs)
pozdrav.Text = "HELLO WORLD!"
End Sub
Hello World v ASP.NET!
Je to skoro stejné jako u C#, až na pár výjimek:
Sub ukazPozdrav(sender As Object, e As EventArgs)
Namísto void se píše Sub (z Visual Basicu) a definice proměnných v závorce jsou naopak a je
mezi nimi As (jako) – Sender As Object (odesilatel jako objekt – viz další lekce
o proměnných).
End Sub
Ukončení funkce.
Komentáře
Komentáře slouží k tomu, aby byl kód přehledný a aby se v něm programátor vyznal. Na chod
programu nemají vůbec žádný vliv a kompilátor je automaticky přehlíží, ale je dobré je do
kódu psát, abyste se po nějaké době v kódu vyznali.
VB
Komentář se od kódu odděluje apostrofem.
Kód ‘komentář
C#
U C# máme 2 způsoby, jak komentář napsat. Buďto krátký:
Kód //komentář
Anebo dlouhý:
/* komentář na více
řádků */
kód.
To je pro dnešek vše, příště si řekneme něco o proměnných.
pokud jste již programoval/a v C++/C/Java/Visual Basic, tak tuhle část můžete rovnou
přeskočit, jelikož se nedozvíte nic nového.
Proměnné jsou datová uložiště, kam ukládáme hodnoty. Proměnných máme více typů,
nejpoužívanější jsou:
Visual Basic:
Boolean: logická hodnota, vrací buď true, nebo false (pravda/lež)
Byte : celá čísla 0-255
Char: jeden znak
Double: reálné číslo
Single: reálné číslo (v menším rozsahu než Double)
Integer: celé číslo
Long: celé číslo (ve větším rozsahu než Integer)
Object: základní datový typ. Ostatní datové typy jsou od něj odvozeny.
Short: celé číslo (v menším rozsahu než Integer)
String: řetězec znaků
C#:
bool: logická hodnota, vrací buď true, nebo false (pravda/lež)
byte: celá čísla 0-255
char: jeden znak
double: reálné číslo
float: reálné číslo (v menším rozsahu než Double)
int: celé číslo
long: celé číslo (ve větším rozsahu než Int)
object: základní datový typ. Ostatní datové typy jsou od něj odvozeny.
short: celé číslo (v menším rozsahu než Int)
String: řetězec znaků
Zápis proměnných:
Visual Basic:
Dim x as Integer
Teď jsme vytvořili novou proměnnou x typu Integer (celé číslo).
C#:
int x;
Vytvořili jsme to samé jako u VB.
Přiřazení hodnot:
Máme 2 možnosti, jak přiřadit proměnné nějakou hodnotu.
Způsob č. 1:
Dim x as Integer = 6
Popř. u C#:
int x = 6;
Teď jsme vytvořili proměnnou x a přiřadili jsme jí číslo 6.
Způsob č. 2:
Dim x as Integer
x = 6;
Popř. u C#:
int x;
x = 6;
Teď jsme vytvořili proměnnou x a až potom jsme jí přiřadili číslo 6.
A teď jednoduchý příklad:
Visual Basic:
Sub ukazJmeno(sender As Object, e As EventArgs)
Dim uzivatel as String
uzivatel = jmeno.Text
name.Text = "Takţe se jmenujete "+uzivatel
End Sub
Zadejte vaše jméno:
Nejdříve si vytvoříme proměnnou uživatel typu string, pak do ní dáme hodnotu textového
pole "jmeno" a vypíšeme do label. A teď to samé pro C#:
void ukazJmeno(object sender,EventArgs e){
string uzivatel;
uzivatel = jmeno.Text;
name.Text = "Takţe se jmenujete "+uzivatel;
}
Zadejte vaše jméno:
To je pro dnešek všechno
If/Else/ElseIf
If slouží jako podmínka, „Pokud něco platí, tak udělej tohle“.
Použití:
Visual Basic:
If podmínka Then
tak udělej tohle
End If
C#:
if(podmínka){
tak udělej tohle;
}
Příklad:
Visual Basic:
If x = 6 Then
Response.Write("x je 6!")
End If
C#:
if(x == 6){
Response.Write("x je 6");
}
Tady si musíte dávat pozor u C#, v podmínce if je 2× rovná se, to z toho důvodu, že
proměnné x nepřiřazujete žádné číslo, ale pouze srovnáváte hodnoty!
Else nám poslouží, když se nekoná podmínka. Je nepovinný, a pokud nebude v kódu uveden,
kód v podmínce if bude přeskočen.
Příklad:
Visual Basic:
If x = 6 Then
Response.Write("x je 6")
Else
Response.Write("x není 6")
End If
C#:
if(x == 6){
Response.Write("x je 6");
}
else{
Response.Write("x není 6");
}
Visual Basic.NET nabízí ještě jednu vychytávku, a to příkaz ElseIf:
If x = 6 Then
Response.Write("x je 6")
ElseIf x = 7 Then
Response.Write("x je 7")
Else
Response.Write("x není ani 6, ani 7!")
End If
ElseIf bohužel C# nemá, ale to moc nevadí, jelikož se dá nahradit vložením příkazu if do
příkazu else:
int x = 5;
if(x == 6){
Response.Write("x je 6!");
}
else{
if(x == 7){
Response.Write("x je 7");
}
else{
Response.Write("x neni 6 ani 7!");
}
}
Někdy určitě budete potřebovat zjistit podmínkou, jestli platí to a to, popřípadě to nebo to.
V tom případě je na místě použít logické operátory. Ve VB to jsou and (a) a or (nebo), v C# to
je && (a) a || (nebo).
Příklad:
Visual Basic:
Dim x as Integer = 6
Dim y as Inreger = 7
If x = 8 or y = 8 Then
Response.Write("X nebo Y je 8!")
End If
C#:
If(x == 8 || y == 8){
Response.Write("X nebo Y je 8!");
}
Cyklus For
Cyklus for použijeme, když chceme něco opakovat, než nějaká proměnná nabude určité
hodnoty:
Visual Basic:
For promenna = pocatecni hodnota To konec hodnota
prikazy v Cyklu….
Next promenna
C#:
for(promenna = pocatecni hodnota;ukoncovaci podmínka;zvetseni/zmenseni
promenne){
prikazy v Cyklu….
}
Příklad:
Visual Basic:
Dim i as Integer
For i = 1 To 6
Response.Write("Zdravím vás, dnes uţ po "+i.toString()+".")
Next i
Nastavíme proměnnou i hodnotu 1 a necháme ji opakovat, dokud není rovna hodnotě 6. Poté
necháme vypsat text a nakonec zvětšíme proměnnou o 1.
C#:
int i;
for(i = 1;i ");
}
Nejdříve nastavíme proměnnou i na 1, poté ji necháme opakovat dokud není menší nebo
rovna 6 a pak nastavíme, že se má hodnota i zvětšovat (i++ znamená i = i + 1). Následně už
jen vypíšeme text.
Není pro nás problém nastavit, aby se hodnota zmenšovala:
Visual Basic:
For i=6 To 1 Step -1
Response.Write("Zavodník uţ jede "+i.toString()+". kolo")
Next i
A v C#:
for(i = 6;i >= 1;i--){
Response.Write("Závodník uţ jede "+i+". kolo");
}
A nakonec jeden lehký příklad, kdybyste něco nepochopili:
Visual Basic:
Sub ukazJmena(sender As Object, e As EventArgs)
Dim i as Integer
Dim kolik as Integer
Dim jmeno as String
Dim opacne as String
jmeno = txtJmeno.Text
opacne = txtOpacne.Text
kolik = Int32.Parse(txtKolik.Text) //prevedeme ze String na
Integer
for i=1 To kolik
Response.Write("("+i.toString()+"): Jmenujete se
"+jmeno+"!")
Next i
Response.Write("")
if opacne = "0" Then
for i=kolik To 1 Step -1
Response.Write("("+i.toString()+"): Jmenujete se
"+jmeno+"!")
Next i
ElseIf opacne = "1" Then
Response.Write("::nepral jste si vypsat cyklus opacne::")
End If
Response.Write("")
End Sub
Kolikrát chcete jméno vypsat:
Zadejte jméno, které chcete vypsat:
Chcete nechat cyklus vypsat opacne(0=ano,1=ne):
A to samé v C#:
void ukazJmena(object sender,EventArgs e){
int i,kolik;
string jmeno,opacne;
jmeno = txtJmeno.Text;
opacne = txtOpacne.Text;
kolik = Int32.Parse(txtKolik.Text); // prevedeme ze string na int
for(i=1;i");
}
Response.Write("");
if(opacne == "0"){
for(i=kolik;i>=1;i--){
Response.Write("("+i+"): Jmenujete se
"+jmeno+"!");
}
}
else{
if(opacne == "1"){
Response.Write("::nepral jste si vypsat cyklus opacne::");
}
}
Response.Write("");
}
Kolikrat chcete jmeno vypsat:
Zadejte jméno, které chcete vypsat:
Chcete nechat cyklus vypsat opacne(0=ano,1=ne):
Doufám, že je vám to vše jasné, příště se podíváme na cykly while, do-while a příkaz switch.
do-while/do-loop-while
často se stává, že nevíme, kolikrát má cyklus proběhnout. V takovém případě nám poslouží
cyklus s podmínkou na konci, do-while.
C#
do{
příkazy v cyklu
}while(podmínka)
VB
Do
příkazy v cyklu
Loop While podmínka
Příkazy v cyklu se provádí tak dlouho, dokud podmínka nemá hodnotu TRUE.
Příklad
Jednoduchý příklad vypočítá, kolik má rok týdnů:
C#
void Page_Load(){
int tydenDni = 7;
int rokDni = 365;
int rokTydnu = 0;
do{
rokTydnu++;
tydenDni = tydenDni+7;
Response.Write("Rok nemá "+rokTydnu+" týdnů.
");
}while(tydenDni Vypíše se
Nazdar kamaráde
}
VB
Sub Pozdrav
Response.Write(„Nazdar kamaráde“)
End Sub
Sub Page_Load
Response.Write(„A nyní zavoláme naší proceduru Pozdrav(): „);
Pozdrav // nyní jsme zavolali proceduru Pozdrav => Vypíše se
Nazdar kamaráde
End Sub
Procedury s parametry
Většinou se stane, že činnosti, které chceme provádět uvnitř procedury, nejsou úplně stejné,
ale jsou trochu rozdílné. K tomu nám slouží parametry, jimiž lze ovlivňovat chování
procedury.
C#
void Pozdrav(string barvaTextu){
Response.Write(„Nazdar kamarade!
“);
}
void Page_Load(){
Pozdrav(„black“);
Pozdrav(„red“);
Pozdrav(„blue“);
Pozdrav(„green“);
}
Vytvořili jsme opět proceduru pozdrav. V závorce jsme vytvořili proměnnou typu string
barvaTextu a pak jsme s ní pracovali v proceduře. Při volání procedury jsme do závorky dali
řetězec s názvem barvy.
To samé ve VB.NET:
Sub Pozdrav(barvaTextu As String)
Response.Write(„Nazdar kamarade!
“)
End Sub
Sub Page_Load
Pozdrav(„black“)
Pozdrav(„red“)
Pozdrav(„blue“)
Pozdrav(„green“)
End Sub
Samozřejmě můžete v proceduře užít více parametrů. V takovémto případě oddělujete
parametry čárkou:
C#
void Pozdrav(string barvaTextu,int velikostTextu){
Response.Write(„Nazdar kamarade!
“);
}
void Page_Load(){
Pozdrav(„black“,5);
Pozdrav(„red“,10);
Pozdrav(„blue“,1);
Pozdrav(„green“,50);
}
VB
Sub Pozdrav(barvaTextu As String,velikostTextu As Integer)
Response.Write(„Nazdar kamarade!
“)
End Sub
Sub Page_Load
Pozdrav(„black“,5)
Pozdrav(„red“,10)
Pozdrav(„blue“,1)
Pozdrav(„green“,50)
End Sub
Funkce:
Jak jsem říkal na začátku, mezi procedurami a funkcemi není skoro žadný rozdíl, proto si teď
ukážeme pouze jednoduchý příklad funkce:
C#
string Odkaz(string kam,string text){
string x;
x = "
"+text+"";
return x;
}
void Page_Load(){
Response.Write(Odkaz("www.programujte.com","e-zin
programujte")+Odkaz("www.atlas.cz","atlas.cz"));
Response.Write(Odkaz("www.centrum.cz","Centrum.cz")+Odkaz("www.seznam.cz",
"seznam"));
}
Všiměte si, že když vytváříme funkci Odkaz, už není void, ale string. To z toho důvodu, že
funkce vrací hodnotu typu string. Dále je tam důležitý příkaz return, tím definujeme, kterou
hodnotu vracíme. V našem případě to je proměnná x. Pokud bychom na příkaz return
zapomněli, překladač by nahlásil chybu.
VB
Function Odkaz(kam As String,text As String)As String
Dim x As String
x = "
"+text+""
Return x
End Function
Sub Page_Load
Response.Write(Odkaz("www.programujte.com","e-zin
programujte")+Odkaz("www.atlas.cz","atlas.cz"))
Response.Write(Odkaz("www.centrum.cz","Centrum.cz")+Odkaz("www.seznam.cz",
"seznam"))
End Sub
Ve VB.NET se funkce vytváří pomocí klíčových slov Function a End Function. Stejně jako
u C# musíme definovat typ návratové hodnoty (v našem případě string).
To je pro dnešek vše. Příště se podíváme na objekty.
Objekty
objekty jsou bloky vzájemně souvisejících dat. Každý objekt má v sobě skupinu proměnných,
které obsahují informace o objektu. Kromě proměnných může objekt obsahovat také
procedury, nebo funkce (metody objektu).
Vytvoření třídy
Vytvoříme si třídu fotbalista, do které se budou zapisovat informace o fotbalistovi.
C#
class fotbalista{
public string jmeno;
public string prijmeni;
public int cisloDresu;
public bool aktivni;
}
VB
Class fotbalista
public jmeno As String
public prijmeni As String
public cisloDresu As Integer
public aktivni As Boolean
End Class
Nyní jsme vytvořili třídu fotbalista. Možná se ptáte, proč je před proměnnou slovo public.
Tímto slovem definujeme, že proměnná bude veřejná, takže ji budeme moci použít i v jiných
procedurách/funkcích.
Třídu máme vytvořenou, teď ji použijeme:
C#
class fotbalista{
public string jmeno;
public string prijmeni;
public int cisloDresu;
public bool aktivni;
}
void Page_Load(){
fotbalista baros = new fotbalista();
fotbalista panenka = new fotbalista();
string bAktiv,pAktiv;
baros.jmeno = „Milan“;
baros.prijmeni = „Baroš“;
baros.cisloDresu = 11;
baros.aktivni = true;
panenka.jmeno = „Antonín“;
panenka.prijmeni = „Panenka“;
panenka.cisloDresu = 0;
panenka.aktivni = false;
bAktiv = baros.aktivni ? „ je aktivní“ : „není aktivní“;
pAktiv = panenka.aktivni ? „je aktivni“ : „není aktivni“;
Response.Write(baros.jmeno+“ „+baros.prijmeno+“(„+baros.cisloDresu+
“) „+bAktiv+“
“);
Response.Write(panenka.jmeno+“ „+panenka.prijmeno+“(„+panenka.cislo
Dresu+“) „+pAktiv+“
“);
}
VB
Class fotbalista
public jmeno As String
public prijmeni As String
public cisloDresu As Integer
public aktivni As Boolean
End Class
Sub Page_Load
Dim baros As fotbalista = new fotbalista()
Dim panenka As fotbalista = new fotbalista()
Dim bAktiv As String
Dim pAktiv As String
baros.jmeno = "Milan"
baros.prijmeni = "Baroš"
baros.cisloDresu = 11
baros.aktivni = true
panenka.jmeno = "Antonín"
panenka.prijmeni = "Panenka"
panenka.cisloDresu = 0
panenka.aktivni = false
If baros.aktivni Then
bAktiv = " je aktivní"
Else
bAktiv = "není aktivní"
End If
If panenka.aktivni Then
pAktiv = "je aktivni"
Else
pAktiv = "není aktivni"
End If
Response.Write(baros.jmeno+"
"+baros.prijmeni+"("+baros.cisloDresu.toString()+") "+bAktiv+"
")
Response.Write(panenka.jmeno+"
"+panenka.prijmeni+"("+panenka.cisloDresu.toString()+") "+pAktiv+"
")
End Sub
Lehké, že? Vytvoříte třídu, pak ji použijete jako proměnnou, a to z toho důvodu, že proměnné
jsou také objekty, akorát příkaz new za nás přidá překladač.
Tak, a to je vše z našeho úvodu do objektů. Možná někdy příště si toho o objektech řekneme
víc. Příšte budeme probírat session a cookies.
Session
Session slouží k dočasnému ukládání dat o uživateli nebo o stavu aplikace. Například máte na
stránkách volbu barvy pozadí. Uživatel si vybere nějakou barvu a klikne na OK. Barva se mu
změní, ale jakmile uživatel klikne na další odkaz, barva se mu nastaví na přednastavenou,
protože server neví, jestli se jedná pořád o toho samého uživatele, nebo jestli to není někdo
jiný. A právě k tomu slouží session.
Přidávání hodnot do session
Novou hodnotu můžete do session načíst pomocí metody Add:
C# i VB (samozřejmě bez středníku)
Session.Add(nazev_hodnoty,hodnota);
Anebo to můžete zadat takto:
C#
Session[nazev_hodnoty] = hodnota;
VB
Session(nazev_hodnoty) = hodnota
Pokud budeme později chtít zavolat session s danou hodnotou, uděláme to takhle:
C#
Session[nazev_hodnoty];
U VB.NET to bude stejně, akorát místo hranatých závorek budou kulaté a nebude tam
středník.
Onen příklad s barvou:
C#
string[] seznamBarev =
{"Modrá","Ţlutá","Zelená","Oranţová","Červená"}; //nastavime obsah
seznamu barev do pole
string barvaKod = ""; // vytvorime promennou do ktere budeme
ukladat kod barev
void Page_Load(){
if(!IsPostBack){ //pokud je stranka načtena poprvé
dlBarva.DataSource = seznamBarev; // tak do seznamu dlBarva
volţíme obsah pole seznamBarev
dlBarva.DataBind(); // a aktualizujeme seznam
}
}
void ulozitBarvu(object sender,EventArgs e){
barvaKod = "";
switch(dlBarva.SelectedIndex){ // zjistime kterou polozku si
uzivatel vybral
case 0 : barvaKod = "4448B7"; break; // a podle toho nacteme
do promenne barvaKod kód barvy..
case 1 : barvaKod = "D7CF52"; break;
case 2 : barvaKod = "4A842B"; break;
case 3 : barvaKod = "F49D22"; break;
case 4 : barvaKod = "EA2824"; break;
}
Session.Add("bPozadi",barvaKod); // a pote ulozime kod barva do
Session bPozadi
}
'>
stranka 2
object pozadi; // vytvorime promennou typu object
void Page_Load(){
if(Session["bPozadi"] != null){ // pokud Session bPozedi neni
prazdna
pozadi = Session["bPozadi"]; // tak vlozime do promenne pozadi
obsah Session bPozadi
}
else{ // jinak..
pozadi = "FFFFFF"; // nastavime pozadi na bilou
barvu..
}
}
'>
Stránka 2..
Stranka 1
VB
Dim seznamBarev As String() =
{"Modrá","Ţlutá","Zelená","Oranţová","Červená"} 'nastavime obsah seznamu
barev do pole
Dim barvaKod As String = "" ' vytvorime promennou do ktere budeme
ukladat kod barev
Sub Page_Load
If IsPostBack = False Then 'pokud je stranka načtena poprvé
dlBarva.DataSource = seznamBarev ' tak do seznamu dlBarva
volţíme obsah pole seznamBarev
dlBarva.DataBind() ' a aktualizujeme seznam
End If
End Sub
Sub ulozitBarvu(sender As object,e As EventArgs)
barvaKod = ""
Select dlBarva.SelectedIndex ' zjistime kterou polozku si
uzivatel vybral
case 0
barvaKod = "4448B7" ' a podle toho nacteme do promenne
barvaKod kód barvy..
case 1
barvaKod = "D7CF52"
case 2
barvaKod = "4A842B"
case 3
barvaKod = "F49D22"
case 4
barvaKod = "EA2824"
End Select
Session.Add("bPozadi",barvaKod) ' a pote ulozime kod barva do
Session bPozadi
End Sub
'>
stranka 2
Dim pozadi As Object ' vytvorime promennou typu object
Sub Page_Load
if Session("bPozadi") Nothing Then ' pokud Session bPozedi
neni prazdna
pozadi = Session("bPozadi") ' tak vlozime do promenne pozadi
obsah Session bPozadi
Else ' jinak..
pozadi = "FFFFFF" ' nastavime pozadi na bilou
barvu..
End If
End Sub
'>
Stránka 2..
Stranka 1
Když si nyní vybereme některou barvu, dáme OK a klikneme na odkaz, další stránka bude mít
stejnou barvu jako ta předešlá. Ovšem když zavřeme prohlížeč a potom opět najedeme na naši
stránku, barva pozadí bude opět původní a barva na další stránce bude bílá. To je z toho
důvodu, že stránky ztratí kontakt se serverem, session se vymaže. Pokud bychom chtěli, aby
se informace uchovaly, musíme k tomu použít cookies.
Cookies
Cookies jsou malé soubory, které jsou uloženy na uživatelově pevném disku a do kterých
můžeme ukládat potřebné informace. Pozor si musíme dávat na to, že uživatel může mít ve
svém prohlížeči používání cookies zakázáno, a v tom případě mu naše aplikace fungovat
nebude.
Vytvoření cookies
C#
Response.Cookies[nazev_hodnoty].Value = hodnota;
Ve VB.NET je to stejné, s tím rozdílem, že hranaté závorky jsou nahrazeny kulatými a
odděláme středník.
Pokud budeme chtít cookies později zavolat, uděláme to takhle:
C#
Response.Write(Request.Cookies[„nazev_hodnoty“].Value);
U VB.NET je to stejné, opět s tím rozdílem, že hranaté závorky jsou nahrazeny kulatými a
odděláme středník.
Doba trvání
Cookies jsou v uživatelově počítači uloženy pouze dočasně, po uplynutí nějaké doby jsou
z něj automaticky smazány. Dobu pobytí v počítači určuje nastavení vlastnosti expired, která
je typu DateTime.
C#
DateTime dobaPlatnosti = new DateTime.Now;
dobaPlatnosti.AddDays(5);
Response.Cookies[„nazev_hodnoty“].Expired = dobaPlatnosti;
VB
Dim dobaPlatnosti As DateTime = new DateTime.Now
dobaPlatnosti.AddDays(5)
Response.Cookies(„nazev_hodnoty“).Expired = dobaPlatnosti
Nyní jsme cookie s názvem nazev_hodnoty nastavili dobu platnosti dní.
Ukládání více hodnot
Pokud chceme do jednoho „koláčku“ uložit více hodnot, zaměníme pouze slovo .Value
za .Values:
C#
Response.Cookies[„stranka“].Values[„url“] = „www.programujte.com“;
Response.Cookies[„stranka“].Values[„zakladatel“] = „Curo“;
Ve VB.NET je to opět stejné, až na známé výjimky.
A to je pro dnešek vše. Ještě si můžete zkusit jen tak pro sebe vytvořit náš příklad s barvami
pozadí s pomocí cookies.
Export obsahu webovej stránky do nejakého formátu za účelom uloženia je užitočnou
funkciou napríklad aj tohto e-zinu. Implementácia exportu v technológii ASP.NET s použitím
jazyka C# je jednoduchá záležitosť, ako je to možné vidieť na nasledujúcich riadkoch.
Stránka a obsah
Vo väčšine prípadoch sa neexportuje celá stránka kvôli postranným panelom, ako je napríklad
menu. Potrebný obsah je preto najlepšie mať predformátovaný, a tak pripravený na možnosť
jeho exportu ako nezávislej časti. Jeden zo spôsobov, ako to dosiahnuť, je napríklad použitie
http://msdn2.microsoft.com/en-us/library/y6wb1a0e(VS.71).aspx">User controlu alebo
PlaceHolderu .
Príklad exportu ovládacieho prvku
Majme nasledujúci kúsok kódu, v ktorom chceme exportovať tabuľku do HTML súboru po
kliknutí na button:
1
2
3
4
5
6
7
8
9
V globále sa získanie požadovaného obsahu zo stránky deje na základe ID ovládacieho prvku
a StringWriteru . Prvok sa nechá vyrenderovať pomocou metódy RenderControl do objektu
typu HtmlTextWriter , ktorému sa určí StringWriter ako parameter pri vytváraní objektu.
System.IO.StringWriter sw = new System.IO.StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
tblToExport.RenderControl(hw);
Teraz je tabuľka v objekte sw. Spojazdnenie samotného exportu sa skladá zo zopár úkonov
s triedou
protected void btnExport_Click(object sender, EventArgs ea) { // vycisti buffer
Response.Clear(); // urcenie typu obsahu Response.ContentType = "text/html"; // kodovanie
obsahu Response.ContentEncoding = System.Text.Encoding.UTF8; // zahlavie
Response.AddHeader("content-disposition", "attachment;filename=table.html"); // ziskanie
obsahu prvku System.IO.StringWriter sw = new System.IO.StringWriter(); HtmlTextWriter
hw = new HtmlTextWriter(sw); tblToExport.RenderControl(hw); // zapis do vystupneho
prudu Response.Write(sw.ToString()); // ukoncenie Response.End(); }
V záhlaví je prvý parameter názov HTTP headera, do ktorého sa následne pridá hodnota
predstavujúca druhý parameter. V tomto prípade ide o prílohu s názvom súboru table.html.
Ako typ obsahu sa dá určiť napríklad "application/ms-excel" a prípona súboru .xls. Týmto
spôsobom bude exportovaný súbor možné otvoriť v Exceli, ktorý html syntax prekonvertuje
na svoje použitie (aj keď sa nebude jednať priamo o excelovský súbor vzhľadom na to, že
excel vytvára binárne súbory).
Polia znakov a čísel, čiže reťazce, majú v C# rôzny druh zápisu a dajú sa ľahko formátovať
podľa vlastných potrieb. Často sa pri vývoji môžeme stretnúť s problémom, napr. vypísať
niekoľkomiestnu číselnú hodnotu tak, aby bola rozdelená po troch cifrách (10000000 -> 10
000 000). Riešenie tohto problému, ale aj mnohých iných sa bude nachádzať v tomto článku.
Metódy ako napr. http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/cpref/html/frlrfsystemconsoleclasswritelinetopic1.asp">Console.WriteLine alebo
String.Format slúžiace na výpis a formátovanie reťazcov poskytujú užitočné vlastnosti. Pri
uvedení jednoduchého príkladu
int chlapci = 15;
int dievcata= 20;
Console.WriteLine("Pocet chlapcov: {0} Pocet dievcat: {1}", chlapci,
dievcata);
je vidno, že hodnoty premenných sú vypísané na mieste zložených zátvoriek s indexom, ktorý
určuje poradové číslo premennej. To isté umožňuje metóda String.Format, ktorú v
nasledujúcom kóde použijeme pri výpise reťazca do SubItemu v ListView (obrázky pod
zdrojovými kódomi majú len informatívny charakter)
int ucet = 60000;
item.SubItems.Add(String.Format("{0}", ucet));
Tu nastáva menší problém s formátom vypísanej hodnoty, ktorá je na prvý pohľad zle
čitateľná. Lepšie by bolo, ak by táto hodnota bola rozdelená po troch cifrách čím by sa zlepšil
vzhľad aj čitateľnosť
int ucet = 60000;
item.SubItems.Add(String.Format("{0:n0}", ucet));
Tým že sa v zložených zátvorkách za indexom premennej pridal špecifikátor ":n0" sme určili
formát výpisu hodnoty premennej v ListView a výsledok je prijateľnejši ako v prvom prípade.
Pri spätnej konverzii z upraveného formátu (60 000) na pôvodný sled čísel (60000) je hodnota
oddelená na tisícky braná ako string, nie ako číslo. Preto sa táto hodnota premieňa späť na
číslo pomocou metódy Parse .
String myString = "60 000";
Console.WriteLine(myString);
int x = int.Parse(myString,
System.Globalization.NumberStyles.AllowThousands);
Console.WriteLine(x);
Samozrejme C# obsahuje celú sadu rôznych formátov zobrazenia. Niektoré z nich sú uvedené
nižšie v tabuľkách.
Špecifikátor Popis Formát Vstup Výstup
c mena (peniaze) {0:c} 500 500,00 SK
d Celé číslo {0:d} 500 500
e Vedecké číslo {0:e} 500 5,000000e+002
f Pevná rádová bodka {0:f} 500 500,00
g Všeobecný formát {0:g} 500 500
n Číslo s medzerami (alebo čiarkami) po tisícoch {0:n} 50000 50 000,00
r Round trippable {0:r} 3,14 3,14
x Hexadecimálna hodnota {0:x4} 500 1F4
C# taktiež podporuje vytváranie vlastných formátovaní.
Špecifikátor Popis Formát Vstup Výstup
0 Vyplňuje nulami {0:00.0000} 3,14 03,1400
# Uzatvorí číslo {0:(#).##} 3,14 (3),14
. Desatinná bodka so zaokrúhlením {0:0.0} 3,14 3,1
, Oddeľovač tisíciek {0:0,0} 50000 50 000
,. Zmena veľkosti čísla {0:0,.} 50000 50
% Percento {0:0%} 3,14 314%
e Exponent {0:00e+0} 3,14 31e-1
Uvedené tabuľky neobsahujú všetky podporované formátovacie znaky a možnosti.
Doplňujúce informácie:
Zložené formátovanie
Štandardné formátovanie čísel
Vlastné formátovanie čísel
Štandardné formátovanie dátumu a času
init()
jeden z nejčastěji pokládaných dotazů začínajících .NET vývojářů se týká odesílání e-mailů,
proto se vás v následujících několika dílech pokusím s metodami odesílání e-mailů
v prostředí .NET seznámit. Zpočátku se dozvíte něco o odesílání běžných zpráv, o metodách
odesílání a jejich konfiguraci.
Vytvoření a odeslání zprávy
Zprávu vytvoříte vytvořením nové instance třídy http://msdn2.microsoft.com/en-
us/library/system.net.mail.mailmessage.aspx">System.Net.Mail.MailMessage – základní
údaje o zprávě můžete nastavit přímo v jejím konstruktoru. V jednom z konstruktorů jsou
požadovány 2 parametry typu System.Net.Mail.MailAddress – tato třída umožňuje zadat
kromě e-mailové adresy i zobrazované jméno s jistotou, že se ve zprávě správně zakóduje.
public void SendMail()
{
// vytvoření nové zprávy
System.Net.Mail.MailMessage message = new
System.Net.Mail.MailMessage(new
System.Net.Mail.MailAddress("odesilatel@mail.cz", "Odesílatel"), new
System.Net.Mail.MailAddress("prijemce@mail.cz", "Příjemce"));
// přiřazení dalšího příjemce - tímto bude mít zpráva 2 příjemce
message.To.Add(new System.Net.Mail.MailAddress("prijemce2@mail.cz",
"Příjemce2"));
// předmět zprávy
message.Subject = "Předmět zprávy";
// tělo zprávy
message.Body = "Tělo zprávy";
// určení typu zprávy
message.IsBodyHtml = true;
// vytvoření SMTP klienta
System.Net.Mail.SmtpClient smtp = new
System.Net.Mail.SmtpClient("smtp.mail.cz", 25);
// pokud je to potřeba, můţete provést přihlášení k SMTP serveru
smtp.Credentials = new System.Net.NetworkCredential("Username",
"Password");
// nastavení metody odesílání
smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
// můţete povolit nebo zakázat zabezpečené odeslání - některé SMTP
servery nedovolují zabezpečené připojení
smtp.EnableSsl = false;
// odeslání vytvořené zprávy
smtp.Send(message);
}
K odesílání zprávy slouží třída System.Net.Mail.SmtpClient . Třída mimo jiné umožňuje
přihlášení k SMTP serveru, které probíhá prostřednictví třídy System.Net.NetworkCredential
. Vlastnost DeliveryMethod, která je typu SMTP server dovolí, můžete přes vlastnost
EnableSsl povolit zabezpečené odesílání zpráv.
Metody odesílání a jejich konfigurace
PickupDirectoryFromIis
Výchozí metoda, která použije mail pickup service lokálního IIS. K odeslání zprávy
nemusí dojít, když .NET Framework není schopen načíst konfiguraci z IIS nebo když
na serveru nejsou zapnuté SMTP services. Nepotřebuje žádné zvláštní nastavení.
SpecifiedPickupDirectory
Hodí se k vyřešení problému s načítáním konfigurace u předchozí metody, nebo když
vlastně žádné e-maily posílat nechcete. Musíte specifikovat, jaký adresář se má použít,
většinou C:\Inetpub\mailroot\Pickup.
Network
Mnou preferovaná metoda, která k odeslání použije jakýkoliv SMTP server, který vám
odeslání dovolí. Většinou je potřeba se přihlásit. Musíte specifikovat alespoň adresu
SMTP serveru. Tato metoda funguje prakticky pokaždé.
Pod popisem metody je uveden příklad konfigurace, která probíhá v konfiguračním souboru
aplikace – app.config v případě klientské aplikace a web.config v případě webové aplikace.
Závěrem
To je v 1. dílu vše, pokud vám tu něco podstatného chybí, neváhejte se zeptat v komentářích.
Příště se dozvíte, jak správně odesílat přílohy a jak zobrazovat obrázkové přílohy v těle
zprávy, aby je následně zobrazil každý klient pracující s HTML zprávami.
dnes přímo navážu na předchozí díl a ukážu vám, jak snadné je odesílat e-maily s přílohami,
jak zobrazovat přiložené obrázky v těle e-mailu a jak nastavit správný MIME typ přílohy pro
zajištění správného zobrazení ve všech e-mailových kilentech.
Odesílání příloh
Klasickou přílohu reprezentuje třída http://msdn2.microsoft.com/en-
us/library/system.net.mail.attachment.aspx">System.Net.Mail.Attachment , přes kterou
můžete připojit fyzický soubor nebo objekt typu
// vytvoření nové přílohy System.Net.Mail.Attachment atach = new
System.Net.Mail.Attachment("c:/soubor.jpg"); // nastavení MIME typu
atach.ContentType.MediaType = System.Net.Mime.MediaTypeNames.Image.Jpeg; //
přiložení přílohy do zprávy message.Attachments.Add(atach);
Velmi důležité je správné určení MIME typu přílohy – zabráníte tak možným komplikacím
při zobrazování na straně klienta.
Nezapomínejte správně určit MIME typ přílohy, můžete tak zabránit
případným chybám v zobrazení na straně klienta.
Zobrazení obrázku v těle e-mailu
Možná vás někdy zajímalo, jak vlastně fungují obrázkové propagační e-maily, spamy, když
žádný obrázek není umístěn na externím serveru ani jako běžná příloha. Vše spočívá v tom, že
zvláštnímu typu přílohy přiřadíte určité ContentId a následně zobrazíte obrázek
v HTML zprávě.
public void SendMail()
{
// vytvoření nové zprávy
System.Net.Mail.MailMessage message = new
System.Net.Mail.MailMessage(new
System.Net.Mail.MailAddress("odesilatel@mail.cz", "Odesílatel"), new
System.Net.Mail.MailAddress("prijemce@mail.cz", "Příjemce"));
// přiřazení dalšího příjemce - tímto bude mít zpráva 2 příjemce
message.To.Add(new System.Net.Mail.MailAddress("prijemce2@mail.cz",
"Příjemce2"));
// předmět zprávy
message.Subject = "Vloţený obrázek";
// určení typu zprávy
message.IsBodyHtml = true;
// přilinkování obrázku
System.Net.Mail.LinkedResource lres = new
System.Net.Mail.LinkedResource(@"C:\soubor.jpg");
// přiřazení ContentId
lres.ContentId = "img";
// nastavení MIME typu
lres.ContentType.MediaType =
System.Net.Mime.MediaTypeNames.Image.Jpeg;
// vytvoření alternativního zobrazení zprávy
System.Net.Mail.AlternateView aview =
System.Net.Mail.AlternateView.CreateAlternateViewFromString(@"Tělo
zprávy.", null, "text/html");
// přiloţení přilinkovaného obrázku
aview.LinkedResources.Add(lres);
// přiloţení alternativního zobrazení ke zprávě
message.AlternateViews.Add(aview);
// vytvoření SMTP klienta
System.Net.Mail.SmtpClient smtp = new
System.Net.Mail.SmtpClient("smtp.mail.cz", 25);
// pokud je to potřeba, můţete provést přihlášení k SMTP serveru
smtp.Credentials = new System.Net.NetworkCredential("Username",
"Password");
// nastavení metody odesílání
smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
// můţete povolit nebo zakázat zabezpečené odeslání - některé SMTP
servery nedovolují zabezpečené připojení
smtp.EnableSsl = false;
// odeslání vytvořené zprávy
smtp.Send(message);
}
Znovu jsem uvedl celý kód, abyste se mohli podívat na změny. Obrázek není připojený jako
běžná příloha, ale jako http://msdn2.microsoft.com/en-
us/library/system.net.mail.linkedresource.aspx">System.Net.Mail.LinkedResource , který se
u klienta nezobrazí v seznamu příloh. I v tomto případě je dobré nastavit správný MIME typ.
Není klasicky uvedené tělo zprávy message.Body, protože je vytvořený objekt MIME typ.
Obrázek ve zprávě zobrazjete bežným tagem.
Jako src zvolte prefix cid: a následně ContentId, které jste přiřadili vašemu obrázku, v tomto
případě je to img.
Závěrem
To je všechno, co jsem vám chtěl sdělit. Vaše dotazy pište do komentářů – mohou mě
inspirovat k napsání dalšího dílu tohoto krátkého seriálu.
občas se stává, že je nutné z nějakého textu odstranit znaky s diakritikou. Většinou není
požadováno jejich úplné odstranění, ale nahrazení za jejich ekvivalenty bez diakritiky, aby
text zůstal čitelný. V .NET 2.0 je řešení celého problému snadnější, než se může zdát.
Ve starších verzích .NET by bylo nutné vytvořit seznam písmen s diakritikou a k nim přiřadit
jejich ekvivalenty. Následně by pak docházelo k postupnému nahrazování písmen v textu, ale
toto řešení není příliš spolehlivé, protože většinou nevytvoříte kompletní seznam všech
existujících znaků s diakritikou. V .NET 2.0 je naštěstí možné pracovat s tzv. Unicode(Normy,
které mají učinit počítače použitelnými pro včechny jazyky a odstranit problémy původně
osmibitové znakové sady.) kategoriemi.
S pomocí níže uvedené metody se oddělí znak od jeho modifikátoru, zkontrolují se všechny
znaky a ze znaků, které nejsou modifikátory, se sestaví nový řetězec. Nebudu vysvětlovat, co
znamenají všechny modifikátory metod, návratový typ a další klíčová slova – to je úkolem
lektora zdejšího kurzu jazyka C#.
public static string RemoveDiacritics(String s)
{
// oddělení znaků od modifikátorů (háčků, čárek, atd.)
s = s.Normalize(System.Text.NormalizationForm.FormD);
System.Text.StringBuilder sb = new System.Text.StringBuilder();
for (int i = 0; i
V předešlém kódu je důležitá především závěrečná sekce, kde používáme
Server.Transfer("/clanek.asp") pro přechod na stránku, která zajišťuje
zobrazení článku. Pro předání ID článku musíme použít sessions a nikoli řetězec s
parametrem za otazníkem jako v běžném URL, protože to IIS nedovoluje (nebo alespoň první
verze, zvládající tento druh interního přesměrování). Použití Server.Transfer zajistí, že se
nám vypíše výstup skriptu "clanek.asp" aniž by došlo ke změně URL, což je přesně to, k
čemu jsme celý čas směřovali.
Výhody a nevýhody
Výhoda popsaného postupu je zřejmá - získáme čitelné URL, odkazující na statické stránky,
což nám otevírá cestu mezi oblíbence vyhledávačů. Nevýhoda je také zřejmá - je jí zvýšená
zátěž serveru, který musí provést mnohem více operací a několik SQL dotazů navíc, a také
prodloužená doba odezvy, tedy doby, uplynuvší mezi kliknutím na odkaz a zobrazením
obsahu stránky. Je tedy na místě pečlivě zvážit, co je pro nás důležitější nebo co nás více
omezuje.
Pokud už se rozhodnete na svém webu "zkrášlená" URL použít, doporučuji vám považovat
skript z tohoto článku pouze za vzor a upravit jej podle vlastního vkusu a potřeb. Nebylo by
od věci zakomponovat do URL třeba názvy kategorií a rubrik, aby se tak zvýšila váha odkazu
pro slova v něm obsažená. Nejdůležitější ze všeho je ale zabezpečení skriptu, jednak proti
selhání vlivem prostého omylu či překlepu a druhak proti cíleným záškodnickým akcím.