Píšeme webovou aplikaci v ASP.NET krok za krokem (část 1)

8. díl - Píšeme webovou aplikaci v ASP.NET krok za krokem (část 1)

Tomáš Herceg       23. 6. 2008       C#, VB.NET, ASP.NET WebForms, HTTP/HTML       17502 zobrazení

V tomto článku začneme psát aplikaci pro evidenci věcí, které jsme někomu půjčili, a které bychom ještě někdy rádi viděli. Pojedeme opravdu krok za krokem, v tomto díle se podíváme na návrh databáze a layoutu pomocí CSS stylů. Také do aplikace přidáme Altairis Simple Web Providers jakožto náhradu standardních providerů, kteří zabezpečují ukládání uživatelských údajů a rolí do databáze.

V minulých dílech jsme se seznámili s možnostmi ASP.NET, ukázali si základní principy a práci s daty. Trochu jsme nakousli i rozšiřitelnost. Další díly seriálu o ASP.NET budou mít trochu jiný charakter.

Vzhledem k tomu, že v poslední době se rozmohl zvyk nevracet zapůjčené předměty a o pár věcí jsem už přišel, protože jsem je někomu půjčil a dotyčný mi je již nevrátil. Bohužel má paměť není z nejlepších, takže u pár věcí jsem již zapomněl, komu jsem je vlastně půjčil. Proto jsem se rozhodl napsat webovou aplikaci pro celou naši rodinu, ve které si budeme evidovat, co jsme komu kdy půjčili, abychom to na něm mohli časem vymáhat. Vzhledem k tomu, že tohle je poměrně hezká webová aplikace, popíšu v několika dílech její tvorbu od úplného začátku až do úplného konce. Na praktických příkladech si předvedeme práci s daty (tu už umíme, ale ještě pár věcí nám chybí), dále si předvedeme práci s uživateli a oprávněními, oblékneme aplikaci do pěkného kabátku pomocí témat a během vývoje si napíšeme i několik vlastních komponent.

Analýza a rozbor problému

Když se něco dělá, mělo by se u toho přemýšlet. Ještě než začneme si tedy rozmyslíme a naplánujeme, co všechno aplikace bude muset umět.

Uživatelé

Aplikaci bude používat víc lidí, v modelovém případě všichni členové rodiny, každý by tedy měl mít své jméno a heslo. Aplikace by také měla mít administrátora, který bude moci uživatelské účty přidávat a odebírat (tuto část nebudeme příliš komplikovat, v případě této aplikace se většinou uživatelé vytvoří na začátku a pak už se měnit nikdy nebudou). Takže budeme mít sadu uživatelů a dále roli admin, do které budeme moci některé z uživatelů přiřadit. Tito uživatelé budou moci přidávat a rušit uživatelské účty (všechny kromě svého). Do celé aplikace budou mít přístup pouze uživatelé zaregistrovaní v systému, žádná část pro nepřihlášené nebude.

Výpůjčky

Každý uživatel bude moci zadat výpůjčku. O každé zapůjčené věci si budeme pamatovat její název, popis, datum zapůjčení, kdo výpůjčku zadal, osobu, které jsme věc půjčili, kontakt na ni a předpokládaný termín vrácení. Povinný bude pouze název, datum zapůjčení a osoba, které jsme půjčovali. Dále samozřejmě musíme vědět, jestli je výpůjčka aktuální, nebo jestli je věc již vrácena.

Každý uživatel bude také smět upravovat a mazat svoje výpůjčky, administrátoři budou moci upravovat a mazat všechny. Při vyplňování názvů, osob a kontaktních informací by se mělo nějak inteligentně nabízet a doplňovat již použité údaje, to vyřešíme až ve chvíli, kdy to bude aktuální.

Kategorie

Protože webová aplikace bude využívána poměrně často a hojně, bylo by dobré i mít možnost zařadit výpůjčky do kategorií. Každá výpůjčka tedy bude moci být zařazena do nějaké kategorie (jedna výpůjčka může být nejvýše v jedné kategorii, ale nemusí být v žádné). Administrátoři budou moci i přidávat, upravovat a odebírat kategorie.

Zobrazení

Na úvodní stránce by se měl zobrazit seznam všech věcí, které jsou zapůjčeny a ještě nebyly vráceny, po kliknutí na nějaké tlačítko nebo něco lze zobrazit i historii výpůjček, které vráceny byly. Zvýrazněné by měly být ty, kterým již vypršel předpokládaný termín vrácení. Každý uživatel by měl vidět všechny výpůjčky, upravovat ale bude smět jen ty svoje (pokud není admin).

Použité technologie

Abychom šli s dobou, použijeme technologii ASP.NET 3.5, pro kterou budeme potřebovat Visual Web Developer 2008 Express Edition, který si můžete stáhnout zdarma, a dále SQL Server 2005 Express Edition. Můžete samozřejmě použít i velký SQL SErver 2005 a velké Visual Studio 2008, je to úplně nastejno.

Pokud chcete použít verzi 2005, musíte si nainstalovat komponentu ASP.NET Ajax Extensions, které jsou v nové verzi již zabudované, a dále budete místo komponenty ListView použít komponentu jinou (např. DataList). Jinak zbytek by měl být stejný, ASP.NET 3.5 je jen rozšíření ASP.NET 2.0.

Začínáme - vytvoření projektu a databáze

Pokud neumíte SQL, vřele doporučuji podívat se na jeden z načích článků zde na VbNetu - buď stručnější Úvod do jazyka SQL, anebo podrobnější Stopařův průvodce po databázích. Základem naší databáze bude tabulka Items, ve které budeme uchovávat zapůjčené položky. Sloupce v tabulkách i názvy budou anglické, čeština v SQL vypadá dle mého názoru divně.

Spusťte si tedy Visual Web Developer 2008 a vytvořte novou WebSite. Zvolte .NET Framework 3.5 a potvrďte výběr:

Vytvoření nového projektu

Vytvořil se nám nový projekt a v něm soubor Default.aspx. Protože budeme používat MasterPager, tento soubor smažte (pravým tlačítkem na něj klikněte v okně Solution Explorer a dejte Remove).

Nyní v podokně Server Explorer (ve Visual Web Developer 2008 se toto okno jmenuje Database Explorer) nalevo (pokud jej nevidíte, v menu View nahoře vyberte položku Server Explorer). Pravým tlačítkem klikněte na položku Data Connections a vyberte Add Connection....

 Vytvoření spojení s databází  Výběr datového zdroje

V okně, které se objeví, zadejte cestu k databázovému serveru (.\SQLEXPRESS) a název databáze Vypujcky. Program se vás zeptá, jestli chcete databázi vytvořit, potvrďte.

  Vytvoření databáze

Pokud se vytvoření nepovede, budete muset Visual Studio spustit jako Administrátor (na Windows Vista), někdy totiž nemohou běžní uživatelé databáze vytvářet (záleží to na nastavení serveru). Nebo databázi vytvořte pomocí program SQL Server Management Studio Express, jde to více způsoby.

Práce s uživatelskými účty v ASP.NET

ASP.NET obsahuje velice dobře vymyšlený model správy uživatelských účtů a oprávnění. Ten se skládá z tří částí, z nichž nemusíte vždy použít všechny (my použijeme pouze první dvě). Tyto části zajišťují všechny běžné používané potřeby a funkce, které bychom mohli potřebovat.

První částí je Membership. Tato část se stará o samotné uživatelské účty, jména a hesla, jejich vytváření, změny a mazání. Stará se tedy o identifikaci a autentizaci uživatelů (zjištění, kdo uživatel je, a ověření, jestli je to skutečně on).

Druhou částí jsou Roles, tedy role. Každého uživatele z Membershipu můžeme přiřadit do několika různých rolí, podle nichž pak provádíme autorizaci (rozhodujeme, co uživatel může a nemůže udělat). Každý uživatel může být ve více rolích a každá role může obsahovat víc uživatelů.

Poslední, třetí částí, kterou my v naší aplikaci nepoužijeme, ale předvedeme si ji někdy příště, jsou Profiles. O každém uživateli si můžeme pamatovat mnoho růžných dalších údajů (jméno, příjmení, adresu, telefon, ale např. i nastavení a přizpůsobení webu jeho požadavkům, případně u e-shopů např. nákupní košík apod.).

Co je na tomto návrhu tak skvělého? To, že vše je napsané velice obecně a můžeme si to přizpůsobit předně našim potřebám. Aby tento celý model fungoval, potřebujeme sadu tzv. providerů, tedy poskytovatelů těchto funkcí. V praxi totiž někdo chce seznam uživatelů a jejich hesla ukládat např. v XML souboru, někdo jiný normálně v databázi, další člověk je chce ukládat úplně nějak jinak, někdo chce přihlašování provázat na Active Directory. To v ASP.NET není problém, pro každý způsob uložení uživatelů si musíme akorát napsat svého providera, který bude umět potřebné funkce. Kterého providera pak aplikace použije, to se nastaví v souboru web.config. Výhodou tohoto způsobu je například to, že pokud vyvíjíme novou aplikaci a potřebujeme ji provázat s uživateli v existující databázi, které má pochopitelně jinou strukturu, napíšeme si providera a je to. Nemusíme díky tomu zahodit všechny funkce, které nám ASP.NET pro práci s uživateli nabízí, nemusíme tedy psát všechno sami. Napíšeme sami jen providera, tedy jen to nejnutnější. Navíc pokud bychom např. chtěli přemigrovat uživatele z XML do databáze, nemusíme sahat do kódu aplikace samotné, změníme jen providera v konfiguračním souboru.

ASP.NET obsahuje vestavěné providery - SqlMembershipProvider, SqlRolesProvider a SqlProfileProvider. Ty si standardně vytváří vlastní databázi v adresáři App_Data a uživatelské údaje ukládají tam. Tabulková struktura, kterou používají, je ale zbytečně komplikovaná a dle mého názoru naprosto nepraktická. Velmi často potřebujeme vlastní tabulky navázat na uživatele pomocí cizích klíčů a tabulky vestavěných providerů nejsou k tomuto účelu vhodně zvoleny. Navíc například u uživatelských profilů jsou všechna data o uživateli vyserializována binárně, takže prohledávat uživatele podle města, odkud pochází, nebo podle příjmení, je prakticky nemožné na úrovni databáze.

Výhodou ASP.NET je ale to, že si providery můžeme napsat sami. Dokonce to ani nemusíme dělat, protože už to někdo většinou udělal za nás. Tentokrát to byl Michal Altair Valášek, který napsal sadu velmi pěkných providerů - Altairis Simple Web Providers. Tento odkaz otevřete a stáhněte si je (položka AltairisWebProviders-1.0.0-bin.zip). Archiv rozbalte a přidejte do projektu složku Bin:

 Přidání složky Bin

Do této složky pak přidejte staženou knihovnu z archivu:

Přidání knihovny do projektu

K zapamatování: Všechny knihovny, které webová aplikace využívá, patří do složky Bin.

Příprava tabulek pro Altairis Simple providery

Vestavění provideři si umí tabulky vytvořit sami (a pokud chcete, můžete je vygenerovat i ručně a přesměrovat vestavěné providery do své databáze v konfiguračním souboru web.config). Pokud je mermomocí chcete použít, můžete, jediné, co se bude lišit, je právě příprava databáze. Zbytek bude úplně stejný, vše bude fungovat tak, jak má, akorát se uživatelské údaje budou ukládat trochu jinak.

Zpět ale k věci - z Altairis Simple Web Providers použijeme dva - Membership a Roles. Musíme jim vytvořit příslušné tabulky, přesný návod najdete v dokumentaci k providerům, která je ke stažení na stejné stránce.

Zkopírujte si tento SQL skript do schránky a spustíme jej proti naší databázi:

 CREATE TABLE dbo.Users (
UserId
int IDENTITY(1,1) NOT NULL,
UserName
varchar(100) NOT NULL,
PasswordHash
char(86) NOT NULL,
PasswordSalt
char(5) NOT NULL,
Email
varchar(100) NOT NULL,
Comment
text NULL,
Enabled
bit NOT NULL,
DateCreated
datetime NOT NULL,
DateLastLogin
datetime NULL,
DateLastActivity
datetime NULL,
DateLastPasswordChange
datetime NOT NULL,
CONSTRAINT PK_Users PRIMARY KEY CLUSTERED (UserId ASC),
CONSTRAINT IX_Users_UserName UNIQUE NONCLUSTERED (UserName ASC)
)

CREATE TABLE dbo.Roles (
RoleName
varchar(100) NOT NULL,
CONSTRAINT PK_Roles PRIMARY KEY CLUSTERED (RoleName ASC)
)

CREATE TABLE dbo.UsersInRoles (
HashId
int IDENTITY(1,1) NOT NULL,
UserName
varchar(100) NOT NULL,
RoleName
varchar(100) NOT NULL,
CONSTRAINT PK_UsersInRoles PRIMARY KEY CLUSTERED (HashId ASC),
CONSTRAINT FK_UsersInRoles_Roles FOREIGN KEY (RoleName) REFERENCES dbo.Roles (RoleName) ON UPDATE CASCADE ON DELETE CASCADE
)

Nyní pravým tlačítkem klikněte na naši databázi v okně Server Explorer a vyberte položku New Query.

Spuštění SQL proti databázi

Okno, které se objeví, zavřete, a kód vložte do textového pole pod tabulkou:

 Vložte SQL kód

Pak nahoře klikněte na ikonku malého červeného vykřičníku Spustit příkaz na databázi . Potvrďte tlačítkem Continue výstrahu a pak už jen odklikněte zprávu, že se spuštění skriptu povedlo. Tím jsme vytvořili tabulky pro Altairis providery.

Příprava tabulky Items

Nyní budeme ještě potřebovat tabulku, do které si budeme ukládat samotné výpůjčky a kategorie. Ty velmi jednoduše vytvoříme. V okně Server Explorer pravým tlačítkem klikněte na položku Tables v naší databázi a vyberte Add New Table:

Přidání tabulky

Tabulku nastavte podle obrázku:

   Tabulka Items

Ještě než tabulku vytvoříme, nastavíme ItemId jako primární klíč. Pravým tlačítkem klikněte na první řádek a vyberte Set As Primary Key.

Nastavení primárního klíče

Nyní stiskněte Ctrl-S a zadejte název tabulky Items:

image

Tím jsme vytvořili tabulku Items. Nyní zbývá vytvořit tabulku Categories s kategoriemi a pak jen nastavíme primární klíče a máme databázi hotovou.

 Tabulka Categories

Podle obrázku vytvořte tabulku Categories. Nezapomeňte první sloupec nastavit jako primární klíč. Nyní provážeme obě dvě tabulky - sloupec CategoryId tabulky Items navážeme na sloupec CategoryId tabulky Categories. Pravým tlačítkem klikněte na sloupec CategoryId v tabulce Items a zvolte položku Relationships.

 Vytvoření vazby

Objeví se nové okno, klikněte na tlačítko Add a vazbu nastavte takto:

 Vytvoření vazby

Vazbu nastavte podle obrázku a potvrďte:

Vytvoření vazby

V prvním okně ještě nastavíme, co se má stát s výpůjčkami v kategorii, kterou někdo smaže. Nastavíme, že pokud někdo smaže nějakou kategorii, tak se automaticky všem výpůjčkám, které v této kategorii byly nastaví CategoryId na NULL, takže nebudou zařazené nikde.

Nastavení ON DELETE

Výhodou tohoto je, že se o potřebné úpravy stará sama databáze, takže pokud smažeme kategorii, nemusíme se starat o nic. To je obrovské usnadnění práce a také pádný důvod, proč používat cizí klíče a vazby. Existuje ještě víc možností, například můžeme nechat databázi, aby všechny výpůjčky v právě mazané kategorii smazala také. To se nám ale pro tento scénář nehodí.

Dále budeme chtít navázat sloupec UserName na tabulku uživatelů. Opět proveďte stejný postup, klikněte na tlačítko Add a novému řádku nastavte detaily vazby takto (pokud tabulku Users v seznamu nemáte, tak nečtete pozorně a zapomněli jste spustit skript pro vytvoření tabulek pro Altairis providery!!).

 Vytvoření vazby

Okno potvrďte a klikněte nahoře na tlačítko Save All (nebo stiskněte Ctrl+Alt+S). Potvrďte okno, které se ujišťuje, že chcete změny uložit.

Nakonec nám ještě zbývá nastavit identity na obou primárních klíčích našich tabulek. Otevřete tedy tabulku Items, vyberte první sloupec ItemId a nastavte mu automatické hodnoty:

Nastavení identity

To samé proveďte v tabulce Categories pro sloupec CategoryId. Pak znovu změny v databázi uložte a máme hotovo.

Asi by bylo 20x rychlejší pro tyto tabulky také uvést SQL skript, zabralo by to méně místa, ale chtěl jsem ukázat víc možností, jak udělat totéž. Sami si můžete vybrat, který způsob vám vyhovuje, tady je dobré, že si nemusíte pamatovat SQL syntaxi vytváření cizích klíčů. Já mám spíš problém, že zapomínám naklikávat vzdálené klíče a u nich pravidla pro mazání, takže raději preferuji ruční psaní SQL skriptů. Ale možné jsou oba způsoby.

Konfigurace providerů

Aby ASP.NET vědělo, které providery má použít, musíme je patřičně nastavit v konfiguračním souboru. Otevřete si tedy soubor web.config a provedeme pár úprav.

Nejprve potřebujeme přidat connection string k naší databázi, takže upravte element connectionStrings takto:

   <connectionStrings>
<
clear/>
<
add name="VypujckyConnectionString" providerName="System.Data.SqlClient" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=Vypujcky;Integrated Security=True"/>
</
connectionStrings>

Dále musíme nastavit Membership a Role providery. Do sekce system.web přidejte tyto deklarace:

     <membership defaultProvider="MyMembershipProvider">
<
providers>
<
clear/>
<
add name="MyMembershipProvider" type="Altairis.Web.Providers.SimpleSqlMembershipProvider" connectionStringName="VypujckyConnectionString" />
</
providers>
</
membership>


<
roleManager enabled="true" defaultProvider="MyRoleProvider">
<
providers>
<
clear/>
<
add name="MyRoleProvider" type="Altairis.Web.Providers.SimpleSqlRoleProvider" connectionStringName="VypujckyConnectionString" />
</
providers>
</
roleManager>

Nakonec najděte element authentication a změňte jej takto:

 <authentication mode="Forms" />

Tím zapneme forms authentication, tedy ověřování uživatelů pomocí jména a hesla, standardně se ověřuje podle přihlášení do Windows, což je možné použít v intranetu, ale na Internetu už nikoliv.

Abyste dobře pochopili strukturu souboru web.config, je nutno podotknout, že kompletní nastavení je v souboru machine.config, který je zahrabán kdesi ve složce .NET frameworku. Z něj se veškerá nastavení dědí a my je v našem web.configu můžeme pozměnit. Aby vestavění provideři fungovali bez zásahu do konfigurace, je v souboru machine.config v sekci connectionStrings položka LocalSqlServer, který ukazuje na databázi aspnetdb.mdf v adresáři App_Data. Navíc jsou v sekci machine.config už přichystáni nastavení vestavění provideři. Proto tedy fungují bez zásahů do konfigurace, není to tím, že by se nemuseli konfigurovat, jsou prostě v machine.config a my je normálně nevidíme. A protože vestavění provideři mají ve vlastnosti ConnectionString nastaveno LocalSqlServer, který je také nadeklarován v machine.config, vytvoří si standardně onu databázi ve složce App_Data a uživatelské údaje ukládají tam. Doporučuji, abyste si soubor machine.config našli a prohlédli, rozhodně v něm však nic neměňte! Najdete ho ve složce Windows\Microsoft.NET\Framework\v2.0.50727\Config.

Vytvoření layoutu webu

Nehodlám tady rozebírat dopodrobna HTML a CSS, to máte umět, bez toho totiž nemá smysl vůbec začínat s ASP.NET, to je pouze nadstavba těchto dvou technologií. Nicméně alespoň základy toho, jak se layout dělá, ukážu v této části. Nejsem designér, takže podle toho moje návrhy vypadají, náš web by ale měl mít zhruba takovýto vzhled:

Návrh vzhledu

Do projektu si nyní přidejte MasterPage - pravým tlačítkem klikněte na název webu v Solution Exploreru a vyberte položku Add New Item...

image

Kód stránky upravte takto:

 <%@ Master Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<
script runat="server">

</
script>

<
html xmlns="http://www.w3.org/1999/xhtml">
<
head runat="server">
<title>Výpůjčky</title>
</
head>
<
body>
<form id="form1" runat="server">
<div id="page">
<div id="header">
<div id="loggedUser">Přihlášený uživatel: </div>
<div id="menu">
Menu
</div>
</div>
<div id="content">
<div id="innerContent">
<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</div>
</div>
<div id="footer">
&copy; 2008 Tomáš Herceg, <a href="http://www.vbnet.cz">VbNet.cz</a>
</div>
</div>
</form>
</
body>
</
html>

Jak je vidět, vytvořil jsem ve stránce jeden hlavní div s id page. To bude celý bílý obdélník na našem návrhu. Jeho šířka je 1000 pixelů (aby se vešel i na monitor s rozlišením 1024x768, nižší stejně už skoro nikdo nemá). Dovnitř jsme umístili další 3 divy - header, content a footer, tedu hlavičku, obsah a patičku. Hlavička obsahuje řádek s přihlášeným uživatelem (loggedUser) a menu. Do obsahu jsme přihodili komponentu ContentPlaceHolder, místo ní se budou dosazovat jednotlivé stránky. Do patičky dáme copyright a informace o autorovi.

Nyní je potřeba udělat CSS styly tak, aby stránka vypadala tak, jak nám říká návrh. A protože jsme v ASP.NET, využijeme k tomuto účelu témata. Pravým tlačítkem v Solution Exploreru klikněte na název webu a vyberte položku Add ASP.NET Folder / Theme. Tím se vytvoří složka App_Themes/téma, ve které budou veškeré podklady pro vzhled webu. Takových témat můžeme vytvořit kolik chceme a pak lze mezi nimi velmi snadno přepínat - buď si uživatel zvolí, jaký vzhled chce, anebo například mobilním zařízením můžeme "podstrčit" zjednodušený layout, aby bylo ovládání praktické i na malém displeji mobilního telefonu. I pokud plánujeme vzhled jen jeden, je výhodné použít témata, ale o tom až dál.

Vytvoření tématu Přejmenování tématu

Naše téma si musíme pojmenovat, protože je jen jedno, dáme mu název Default. Aby naše aplikace téma používala vždy a všude, musíme jej nastavit v konfiguračním souboru. Otevřete si tedy soubor web.config a přidejte elementu pages atribut styleSheetTheme="Default":

Nastavení výchozího tématu v konfiguraci

Tím jsme řekli, že celá aplikace bude používat toto téma. Jaké téma se použije můžeme samozřejmě říci pro každou stránku zvlášť (nahoře v direktivě Page), anebo to můžeme nastavit kódem.

Ještě než začneme dělat samotné styly, stáhněte si archiv s obrázky na pozadí, rozřezal jsem celý návrh na tři části - header, content a footer, každá z částí bude obrázek na pozadí pro stejnojmenný div. Tyto obrázky rozbalte do složky images, kterou si vytvořte ve složce tématu:

Obrázky rozbalené ve složce tématu

Do tohoto tématu nyní přidáme soubory se styly. Protože náš layout bude celkem jednoduchý, dáme vše do jednoho CSS souboru, ale u složitějších designů se vyplatí rozdělit deklarace stylů do více souborů. Pravým tlačítkem klikněte na složku s tématem Default a v nabídce vyberte Add New Item.... Vyberte StyleSheet file a potvrďte.

image

Pokud bychom nebyli v ASP.NET, museli bychom ještě do hlavní stránky přidat do head sekce link rel=StyleSheet atd. ASP.NET ale tohle udělá za nás, z konfigurace ví, které téma chceme použít.

Úplně na začátku musíme nadefinovat písmo a barvu stránky, přidejte tedy do tohoto souboru tuto deklaraci:

 body 
{
    
background-color: #a83939;
    
font-family: Calibri,Segoe UI,Arial,sans-serif;
}

Dále uděláme styl pro element s id page, tedy hlavní bílý obdélník. Bude mít šířku 1000px, nastavíme mu margin: 0px auto (první rozměr udává velikost odsazení shora a zdola, tedy nad a pod tímto elementem nebude žádný okraj, druhý rozměr je okraj napravo a vlevo, v našem případě automatický, ale na obou stranách stejný). Tím pádem se nám element umístí doprostřed stránky. Barvu pozadí mu nastavíme na čistě bílou:

 #page
{
    
width: 1000px;
    
margin: 0px auto;
    
background-color: White;
}

Nyní si budeme muset pohrát s hlavičkou, ta bude pravděpodobně nejkomplikovanější. Jako pozadí jí dáme obrázek header.png ze staženého archivu. Výška elementu bude tedy 128 pixelů (tak je vysoký obrázek), šířka bude 1000px. Protože to, co bude uvnitř hlavičky budeme chtít pozicovat absolutně vůči tomuto elementu, musíme hlavičce také nastavit position: relative.

 #header
{
    
background-image: url('images/header.png');
    
width: 1000px;
    
height: 128px;
    
position: relative;
}

Nyní nastavíme absolutní pozice prvků loggedUsers a menu oproti levému hornímu rohu hlavičky. Nastavíme jejich vzdálenosti zprava a shora, resp. zdola. Není na tom nic světoborného, je to jen hraní s pixely, aby to hezky vyšlo tam, kde texty potřebujeme.

 #loggedUser
{
    
position: absolute;
    
right: 40px;
    
top: 30px;
}

#menu
{
    
position: absolute;
    
right: 40px;
    
bottom: 15px;
    
    
font-weight: bold;
    
color: #591c1c;
}

Hlavičku už máme, můžeme přejít na tělo stránky. Elementu content nastavíme správně pozadí, navíc chceme, aby se opakovalo vertikálně, pokud bude element moc dlouhý. Elementu innerContent, který už bude obsahovat samotný obsah stránky, nastavíme šířku na 900 pixelů (z každé strany chceme 50 pixelů odříznout, to zabere okraj a stín okolo obdélníku prolnutý s pozadím), margin na 0px auto, abychom opět oddíl vycentrovali. Ještě mu nastavíme vertikální padding (vnitřní okraj) na 15 pixelů. V tomto případě nemůžeme použít vertikální margin, protože by se nám tím vytvořila mezera mezi content a header, takže by na sebe podklad nenavazoval.

Celá tahle opičárna by se dala dělat bez innerContentu, kdyby IE6 správně interpretoval vlastnost padding. Přes vnořený element innerContent to funguje, protože padding contentu vlastně simulujeme marginem innerContentu, který funguje naštěstí správně. Pokud máte v tom, co je to margin a padding binec, doporučuji tento článek na serveru JakPsatWeb.cz.

 #content
{
    
background-image: url('images/content.png');
    
background-repeat: repeat-y;
}
#innerContent
{
    
width: 900px;
    
margin: 0px auto;
    
padding: 15px;
}

Nyní už jen dokončíme zápatí stránky a jsme s layoutem hotovi, na tomto kousku už není nic nového:

 #footer
{
    
width: 1000px;
    
height: 58px;
    
background-image: url('images/footer.png');
    
text-align: center;
    
font-size: 85%;
}

Ještě si přidejte definici výchozího vzhledu odstavce a nadpisů:

 h1,h2,h3
{
    
color: #921f1f;
}
p
{
    
text-indent: 1em;
    
text-align: justify;
}

Pravým tlačítkem klikněte na MasterPage.master v podokně Solution Explorer a vyberte položku Add Content Page. Do této stránky vložte tento kód, abychom mohli náš layout otestovat:

 <%@ Page Language="VB" MasterPageFile="~/MasterPage.master" Title="Přehled výpůjček" %>

<script runat="server">

</
script>

<
asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

<h1>Nadpis</h1>
<p>text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text
</p>
<p>text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text
</p>
<p>text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text
</p>

</
asp:Content>

Výsledek

Závěrem

To by bylo pro tento díl vše. Nestihli jsme toho moc, skoro polovina článku byla o databázích a druhá o CSS, na samotné ASP.NET řeč moc nepřišla. Ale vzhledem k tomu, že vyvíjet webové aplikace je o dost složitější než vyvíjet aplikace pro WinForms (musíte umět HTML, CSS, Javascript, SQL, znát principy HTTP a do toho všeho umět používat .NET Framework), jsou i tyto části velice důležité. V příštím díle navrhneme základní strukturu aplikace, uděláme menu a začneme již pomalu navrhovat některé stránky. Doufám, že se vám tento díl líbil, náměty pište do diskuse.

 

hodnocení článku

3 bodů / 3 hlasů       Hodnotit mohou jen registrované uživatelé.

 

Mohlo by vás také zajímat

Práce s časovými pásmy a letním časem v aplikaci a databázi - díl 3.: DateTimeOffset v .NET Frameworku

DateTimeOffset je méně využívanou alternativou struktury DateTime v .NET Frameworku. Navíc dovoluje ukládat časové pásmo a pohodlně s ním pracovat.

Co je to .NET Framework 4.5?

V tomto článku se snažím nastínit rozdíl mezi .NET 4 a .NET 4.5 z pohledu zpětné kompatibility.

Jeden antipattern, který dokáže asynchronní programování pořádně znepříjemnit

 

 

Nový příspěvek

 

Diskuse: Píšeme webovou aplikaci v ASP.NET krok za krokem (část 1)

Chválím seriál, je nejlepší co jsem na internetu našel. Ale zasekl jsem se v přidání providerů do složky bin, protože tu složku nemůžu vytvořit. V té nabídce Add ASP.NET folder totiž není. Nevíte co s tím?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Musíš v Solution Exploreru kliknout na ikonu Show All Files. Potom pravým na bin a Include In Project.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den, díky za tip se zahrnutím bin do projektu.

Bohužel, přestože v Solution Explorer vidím v bin\Altairis.Web.Providers příslušné providery, po zkompilování mám v okně prohlížeče následující chybovou zprávu:

Chybová zpráva analýzy: Typ Altairis.Web.Providers.SimpleSqlRoleProvider nelze načíst.

Zdrojová chyba:

Řádek 34: <providers>

Řádek 35: <clear/>

Řádek 36: <add name="MyRoleProvider" type="Altairis.Web.Providers.SimpleSqlRoleProvider" connectionStringName="VypujckyConnectionString" />

Řádek 37: </providers>

Řádek 38: </roleManager>

Pokud tato diskuse ještě není mrtvá, můžete mi, prosím, poradit, kde je zakopaný pes a co případně ve web.config nebo jinde opravit? Předem děkuji.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Chyba byla bohužel na mé straně, vše funguje, stačí jen dobře číst.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Píšeme webovou aplikaci v ASP.NET krok za krokem (část 1)

Dobrý den,

procházel jsem si doporučený provider a jedna věc mi připradá zvláštní. Proč je pro cizí klíč na tabulku users použit sloupec username? Náš projekt má několik desítek tabulek kde se odkazujeme na tabulku users, není to značně zbytečné mrhání místem? Navíc spousta IS pro každého uživatele vygeneruje jednoznačné číslo, které pak uživatel používá - což mi přijde i bezpečnější, neboť není tak snadno odvoditelné jako username.

S pozdravem

Dobiáš

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Konec jsem ne právě dobře zformuloval, moje otázka zní jestli by nebylo vhodné používat pro vazby sloupce ID číselného typu.

Dobiáš

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Píšeme webovou aplikaci v ASP.NET krok za krokem (část 1)

Dobry den,

chtel bych se zeptat jak by vypadal kod, ktery by pridaval uzivatele do databaze.

S pozdravem

Martin

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Píšeme webovou aplikaci v ASP.NET krok za krokem (část 1)

Dobry den,

velmi sa mi paci vas prispevok a potreboval by som poradit s jednou vecou.

Pouzil som sadu providerov Altairis Simple Web Providers od Michala Valáška.

Potreboval by som dat do tabulky bud Users alebo Profiles s ktorou pracuje Membership trieda, polozku napr. OrgJednotka a mat moznost nastavit userovi tuto polozku trebarz ju naplnit z inej tabulky ako dropdown a upravovat to na stranke Users podobnej ako je ta Vaša.

Je to mozne s tymto providerom alebo by sa musel upravovat.

Potom uz by som len potreboval na nejakej stránke zoznamu filtrovat polozky len z tou OrgJednotkou ktoru ma nastavenu Uzivatel ktori je prihlaseny.

Dakujem za pomoc.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Píšeme webovou aplikaci v ASP.NET krok za krokem (část 1)

Dobrý den,

zkoušel jsem to už několikrát, ale pokaždé se stejně neúspěšným výsledkem. Když chci vytvořit tabulku pro Altairis a zmáčknu tlačítko s červeným vykřičníkem, tak mi to pokaždé vyhodí tabulku s chybou:

SQL Execution Error

Executed SQL statement: CREATE TABLE dbo.Users (

.

.

.

.

Error source: .Net SqlClient Data Provider

Error message: There is already an object named 'Users'in the database.

Děkuji za případnou odpověď jak to vyřešit a co je to přesně za chybu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak si to přece přeložte. V databázi tu tabulku už máte vytvořenou.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Zdravím, děkuji za skvělý tutoriál. Jen mám otázku jak předat parametr aktuálně přihlíšeného uživatele do SELECT skriptu.

Potřebuju toto:

SELECT * FROM Tabulka WHERE login_uzivatele = (Aktuálně přihlášeny user) 

Děkuji moc za radu.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Píšeme webovou aplikaci v ASP.NET krok za krokem (část 1)

Zdravím,

mám takový problém. Předpokládám, že je to jen nějaká kravina, ale jak donutím ASP, aby mi všechny komponenty zobrazoval(o) česky? Celé Visual studio mám v angličtině, a když nyní chci využít komponentu asp:Login , tak je celá v angličtině. ("Log In", "User Name", "Password", ...) Pro mne to problém není, já anglicky umím, ale obávám se, že by to mohlo vadit případným zákazníkům.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Myslím že je to někde v properties nebo když kliknete na tu malou šipku u asp:login komponenty.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Aby komponenta login měla české popisky (přihlášení, jméno, heslo ...), je potřeba nainstalovat českou lokalizaci NET.Frameworku 2.0 , nebo ve vlastnostech komponenty tyto popisky všechny přepsat.

L.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Píšeme webovou aplikaci v ASP.NET krok za krokem (část 1)

Zdravím,

rád bych se zeptal, jak udělat formulář pro přidání uživatele? Chtěl bych nějaký obyčejný, třeba jako je v konfigurační stránce aplikace, kde se zadá jen uživ. jméno, heslo a práva. Už se s tím lámu dlouho, aby to sedělo pro Altairis Simple providery. Teď mám problémy s hashem a saltem hesla plus ještě s nastavením práv v jednom FormView:-( Díky za odpovědi! klidně odpovězte na mail felkl(at)hydrotech.cz

nahlásit spamnahlásit spam 0 odpovědětodpovědět

jde mi o to, když je v právech (tabulka Roles) víc záznámů (ne jen admin) a já chci zvolit, jednu z možností... ;-)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Píšeme webovou aplikaci v ASP.NET krok za krokem (část 1)

Dobrý den , všechno šlo v pohodě , až když jsem se podle vašeho tutoriálu začal hrabat v souboru web.config , mám totiž problém upravit element connectionStrings který v tomto dokumnu jenom končí a nikde nezačíná :)

<?xml version="1.0"?>
<!-- 
    Note: As an alternative to hand editing this file you can use the 
    web admin tool to configure settings for your application. Use
    the Website->Asp.Net Configuration option in Visual Studio.
    A full list of settings and comments can be found in 
    machine.config.comments usually located in 
    \Windows\Microsoft.Net\Framework\v2.x\Config 
-->
<configuration>


    <configSections>
      <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
        <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
          <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
          <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
            <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere" />
            <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
            <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
            <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
          </sectionGroup>
        </sectionGroup>
      </sectionGroup>
    </configSections>  


    <appSettings/>
    <connectionStrings/>

Mám za to , že element connectionStrings by měl začínat tagem(nevím jestli se dá hovořit o tagu)

<connectionStrings>

a ten ja nikde nenašel.. Samozřejmě sem ho tam zkoušel dopsat , ale samozřejmě mi to ihned dopsanej začatek podtrhlo a když jsem i přesto zkoušel spustit MasterPage tak mě to odkázalo na řádek elementu connectionString že tam je chyba.Používám Visual web developer 2008.Děkuji za odpověd a případně se omlouvám jestli je to hloupý dotaz :).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zápis elementu s lomítkem na konci

<connectionStrings />

je jen zkratka zápisu

<connectionStrings></connectionStrings>

,

kde obsah uvnitř je prázdný.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Chjo , sem tušil že to bude nějaký takovýhle blbý přehlídnutí, přitom párovy a nepárový tagy používám denně(což je v tomto případě to samý :D)..Tím pádem už mi vše samozřejmě funguje,příště budu hloubějc pátrat.. Moc děkuji za odpověd.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Píšeme webovou aplikaci v ASP.NET krok za krokem (část 1)

Ahoj, Tomáš. Ja viem, že to nie je súčasťou tohto článku, ale mohol by si mi poradiť, ako sa dá vytvoriť napríklad takýto header.png? Nejaký odkaz?...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nejlépe tak, že máte grafika, který vám to udělá. Pokud grafika nemáte, musíte se naučit alespoň základy práce s nějakým grafickým software. Adobe Photoshop je poměrně drahý, i když studentská licence stojí něco kolem patnácti stovek, ale jsou i softwary zadarmo, například Paint.NET nebo GIMP (kdybych neznal jednoho člověka, který s ním opravdu dělá, tak bych tvrdil, že se s tím dělat nedá, já jsem nebyl schopen v tom udělat naprosto nic).

Nejlíp se to člověk naučí tak, že si na pár hodin sedne vedle grafika a sleduje jeho práci. Pochytíte tak dobré nápady a naučíte se s programem pracovat. Estetické cítění se bohužel naučit nedá, proto můj návrh vypadá tak, jak vypadá.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vďaka za odpoveď. Svoje návrhy si robil sám? A v čom? Dookola opakuješ, že aké sú slabé, ale mne sa veľmi páčia. Od Hungry Snake až doteraz. Preto som sa aj pýtal.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Hungry Snake je fakt otřesný, za tu grafiku se stydím. Je fakt, že tenhle návrh není z nejhorších, ale dobrý také není. Podívej se na weby www.microsoft.com, dev.live.com nebo www.asp.net, to jsou pořádné weby s pořádným designem, těm se já nikdy nevyrovnám. VbNet by mohl vypadat taky tak, ale nejsou lidi na grafiku.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Všetko je uhol pohľadu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vzhled na asp.net od MS je děsný.

VBNET.CZ je lepší (i ta verze z roku 2007 j lepší :-) )!!!

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Píšeme webovou aplikaci v ASP.NET krok za krokem (část 1)

Zdravím,

Po delší době opětzkouším nové věci. ASP.NET a zasekl jsem se na jedne chybě. Můžete mě pomoci ?

Chybová zpráva analýzy: Typ Altairis.Web.Providers.SimpleSqlRoleProvider nelze načíst.

diky

Petr

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Patrně jste zapomněl přidat do složky Bin knihovnu s Altairis Web providery.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

To budeasi ono ale nemohu to podle tveho postupu pridat. muzes me poradit bliž ?

muj postup je :

Project -> ( pravá myš ) -> add -> ADD ASP.NET FOLDER -> a zde BIN není.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To budeasi ono ale nemohu to podle tveho postupu pridat. muzes me poradit bliž ?

muj postup je :

Project -> ( pravá myš ) -> add -> ADD ASP.NET FOLDER -> a zde BIN není.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

uz to mam. stacilo si to jeste jednou precist.

petr

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Express studi mi hlasí, že BIN již existuje, když ho nechám zobrazit, tak v menu chybí polzka aad existing item (je tam pouze add .net folder) když jsem knihovnu pridal rucne v win exploreru, tak se hlásí chyba: Error parsing the web... můžeš poradit co s tím?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Píšeme webovou aplikaci v ASP.NET krok za krokem (část 1)

Zdravim, mam jen dotaz jaky je rozdil mezi tim zda ve web.configu zadam:

<pages theme="Default">

nebo

<pages styleSheetTheme="Default">

Diky

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Píšeme webovou aplikaci v ASP.NET krok za krokem (část 1)

Zdravím,

Mam problem se stazenim :Altairis Simple ASP.NET SQL Providers. Nemohl by mi to nekdo poslat na mail nebo nekde vystavit a poslt mi link ? Prosim

Diky moc

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pošlete mail adresu.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Diskuse: Píšeme webovou aplikaci v ASP.NET krok za krokem (část 1)

Zdravim mám takovej menší možná hloupej dotaz, zkousel jsem zmenit grafiku techto stránek ale v pripate ze prenastavím v CSS barvu pozadi na White tak se mi zmena projevi v Exploreru bez problemu, ale v mozille se nemohu zbavit cerveného pozadí. Nevíte čím by to mohlo být.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Těžko říct, čím to je, když jste nenapsal, co jste přesně v CSS souboru změnil. Ale pokud to funguje v Exploreru, tak zkuste v Mozille zmáčknout Ctrl+F5, aby si znovu načetla styly (je možné, že má v paměti pořád ty staré).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diky za radu CSS mam dobre problem je v tom ze on nenacita nový styly, ale po použití Ctrl+F5 uz to funguje dobre.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Píšeme webovou aplikaci v ASP.NET krok za krokem (část 1)

Dále budeme chtít navázat sloupec UserName na tabulku uživatelů. Opět proveďte stejný postup, klikněte na tlačítko Add a novému řádku nastavte detaily vazby takto:

---------------------------------------------------------------

Tak výše popsaný úkon se mi nedaří provést ... pokud na sloupečku UserName zvolím pravým tlačítkem "Relationships", tak v "Tables And Columns ..." se v kolonce "Primare key table:" nepodaří zvolit: "Users", nabízí pouze "Categories" nebo "Items" ... V čem je problém? Děkuji! F.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nespustil jste skript pro vytvoření tabulek na databázi, jste už druhý, co to tady píše. Jakmile skript zkopírujete do okna podle obrázků, musíte nahoře kliknout na červený vykřičník, čímž se skript provede.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Píšeme webovou aplikaci v ASP.NET krok za krokem (část 1)

Zdravím, váš seriál je skvělý, těším se (se spoustu dalšími) na další díl :)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Píšeme webovou aplikaci v ASP.NET krok za krokem (část 1)

Zdravím, kdy plánujete zveřejnit další část tohoto seriálu? Je moc fajn!

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Píšeme webovou aplikaci v ASP.NET krok za krokem (část 1)

Ešte jedná vec. Nie je jednoduchšie vytvárať Relationships pomocou Database Diagrams?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Způsobů je mnoho, já je nejraději vytvářím tak, že ručně napíšu SQL skript. Když to naklikávám, tak vždycky na něco zapomenu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tvorcovia Visual Studia by asi tým neboli veľmi nadšení. Tak či tak, na výbornú kvalitu článkov som u Teba už zvyknutý, len kvantita bola slabšia. Kedy bude ďalší? :-)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Co si o mě myslí tvůrci Visual Studia mi je ukradené, já si vybírám možnost, která je podle mě spolehlivá. KDyž celý SQL skript napíšu ručně, je to pro mě nejrychlejší a nestává se mi, že tady zapomenu nakliknout nějakou tu vazbu nebo ON DELETE něco.

Další článek bude, až na něj budu mít čas. Kdy to bude, to nevím, zítra asi ne, to musím dodělat něco jiného, pak budu chvíli cestovat, takže snad někdy ve čtvrtek nebo v pátek. Ale nic neslibuju, přestože už 3 týdny nemám školu, práce mám hodně.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Šťastnú cestu a šťastný návrat. Teším sa. Koniec koncov, v tomto článku je čo študovať a nad čím premýšľať. Takže, ak je to minidovolenka, tak si ju uži!

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ta minidovolenka je ryze pracovní záležitost, já mám totiž tu blbou vlastnost, že odpočívat neumím a pořád musím něco dělat.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Píšeme webovou aplikaci v ASP.NET krok za krokem (část 1)

Ahoj! Pokúšam sa vytvoriť vzťahy medzi tabuľkami ale stĺpec Users mi akosi v tabuľkách chýba.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Na začátku článku je skript, který se musí v databázi spustit. Tím se vytvoří tabulky Users, Roles a UsersInRoles.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ach jaj, toto je pre mňa záhada (spustiť skripty v databáze), ak to niekomu funguje, keby by bol taký dobrý a poradil mi.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Co je to za záhadu? Nemůžu poradit, když nevím, co máte za problém. Nemůžete ty skripty pro vytvoření tabulek najít v článku, nebo nevíte, jak je spustit, nebo jste je spustil na správné databázi a nefunguje to? Fungovat by to mělo, protože jsem článek psal přímo při vytváření aplikace a vše, co jsem dělal, jsem přesně popsal do článku.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Ahoj, Tomáš! Zabudol som stlačiť malý červený výkričník. Už to funguje. Ďakujem! Teším sa na pokračovanie článku. Ozaj dobrý.

Ľuboš.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jo, ono je občas dobré si článek přečíst pečlivě. I když je pravda, že zrovna k té větě s červeným vykřičníkem jsem váhal, jestli tam nemám dát jeho ikonku, aby to lidi trklo.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Diskuse: Píšeme webovou aplikaci v ASP.NET krok za krokem (část 1)

Ahoj, Tomáš. Tento článok ma veľmi záujíma. Len som zistil, že veľmi ťažko sa kladú dotazy k takému rosiahlému super článku. Nemohol by si, prosím, jednotlivé časti číslovať? Tak aby sme sa ľahšie orientovali. A ďakujem, že si to urobil aj pre VWD 2008 EE. Fain!

Príjemný večer.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Píšeme webovou aplikaci v ASP.NET krok za krokem (část 1)

Dobrý den, měl bych na Vás velkou prosbu o pomoc nebo alespoň radu, kde bych to měl hledat (třeba i dobrou knihu).

Potřebuji vytvořit formulář, do kterého část údajů (jméno, přijmení, adresa a telefon) načtu z jedné tabulky podle osobního čísla, další údaje vyplní uživatel a všechna tato data se uloží do další tabulky. Jakým způsobem mám toto provést.

Používám VB.NET a Oracle

Děkuji. Ondřej Sýkora

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Píšeme webovou aplikaci v ASP.NET krok za krokem (část 1)

Ten ja nemám.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak si ho zobrazte v menu View nahoře, měl by tam být, i v Express Edicích. Nebo je tam karta Data Sources, která ale funguje úplně stejně.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Ďakujem za odpoveď. Zistil som, že nemám SQL Expres 2005, asi to bude v tom. Akosi mi to samo zmizlo a ďalšie iné veci mi zmizli, Žeby čistením? A aby som nezabudol. Ďakujem za článok. Super!

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nie je to vtom. Mám nejaké iné prostredie.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Iba na pravej strane mám Database Explorer. A tam je Create New SQL Server Database svetlé a nie je do ňno prístup.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak si můžete databázi vytvořit přes SQL Server Management Studio Express, zkuste se podívat do sekce Databáze, v nějakém článku určitě najdete jiný způsob, jak databázi vytvořit a jak se k ní připojit ve Visual Studiu.

Asi si stáhnu i Visual Web Developer, myslel jsem, že Visual Studio je stejné, ale evidentně je tam pár věcí jinak.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Vďaka! Tak skúsim cez SQL Server Management Studio Express.

Príjemný deň!

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ahoj! Asi to nepôjde. Nemohol by si doplniť ten článok na VWD 2008 EE?

Príjemný večer!

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback