Introduction to 'NET and ASP'NET Framework - PowerPoint PPT Presentation

1 / 61
About This Presentation
Title:

Introduction to 'NET and ASP'NET Framework

Description:

Free download from Microsoft website http://www.microsoft.com/italy/msdn ... Sono strettamente legati ai temi di XP: impostare un tema rapido e facile come ... – PowerPoint PPT presentation

Number of Views:321
Avg rating:3.0/5.0
Slides: 62
Provided by: fmgroup2
Category:

less

Transcript and Presenter's Notes

Title: Introduction to 'NET and ASP'NET Framework


1
Introduction to .NET and ASP.NET Framework
  • Politecnico di Torino
  • December 4th , 2007

Mauro Minella mauro.minella_at_microsoft.com
http//blogs.msdn.com/mauromi Microsoft
Certified Solutions Developer Microsoft Certified
Systems Engineer Internet
2
Agenda
  • .NET Framework architecture
  • WEB extension ASP.NET 2.0
  • Development Tools Visual Studio 2008
  • Membership roles and controls
  • Localization, Master Pages, Skins and Themes
  • AJAX
  • Demos/Examples

3
From HTML to ASP.NET
ASP.NET
ASP pages CGI apps ISAPI filters
HTML
4
.NET and ASP.NET architecture
Win32 SDK
.NET Framework
ASP.NET
Unmanaged Applications
Windows Managed Applications (Win Forms, Console,
Services, ...)
WEB Managed Applications (WEB Forms / WEB
Services)
Base Class Library
Base Class Library
Common Language Runtime
Common Language Runtime
WEB Server (IIS)
Sistema Operativo (Windows)
CLR
interoperability, security, garbage collection,
versioning, ...
Class Library
GUI, collections, threads, networking,
reflection, XML, ...
WEB Forms
Web GUI (object-oriented, event-based,
browser-independent)
WEB Services
Distributed services over RPC (SOAP, HTTP)
5
.NET FRAMEWORK PROGRAMMING
  • Binary compatibility for all languages
  • Isolated code (only to allowed memery access)
  • Codice type-safe (no buffer overrun)
  • Just-in-time compiler

C
if (a gt b) max a else max b
C
C
VB
...
J
IL
IL_0004 ldloc.0 IL_0005 ldloc.1 IL_0006
ble.s IL_000c IL_0008 ldloc.0 IL_0009
stloc.2 IL_000a br.s IL_000e IL_000c
ldloc.1 IL_000d stloc.2
compiler
compiler
compiler
compiler
compiler
IL code ( metadata)
loader
Intel code
mov ebx,-4 mov edx,-8 cmp ebx,edx jle
17 mov ebx,-4 mov -12,ebx ...
verifier
JIT compiler
machine code
6
Indipendence from platform and code langauge
  • .NET is a CLI implementation
  • Common Language Infrastructure
  • CLI is an ECMA standard, defined with the C
  • ECMA-334, ECMA-335
  • Existing CLI implementations
  • SSCLI (Microsoft per Windows, FreeBSD and
    Macintosh)
  • Mono (for Linux)
  • DotGNU
  • Intel OCL (Open CLI Library)

7
ViewState
  • Keeps the state at Page level
  • Its a name/value dictionary
  • Its a Hidden field of the page
  • Can also be used programmatically
  • ViewState.Add(NomeUtente, Mauro)
  • Can be disabled at page level
  • lt_at_ Page ... EnableViewState"false"gt
  • Be aware some controls might not work any more!

8
PostBack
  • Tipical usage code optimiza-tion for accessing
    hi cost (like DB) resources just once
  • IsPostBack property is true since second time on
  • Page_Load happens when
  • Button Submit
  • Server-side controls with enabled AutoPostBack
  • Can be used to initialize controls

protected void Page_Load(..)
if(Page.IsPostBack false) //
Its the first access // Lets open the
DB connection!
9
DEMOLets build our first ASP.NET application!
  • Development Tool Microsoft Notepad
  • A .aspx page tipically has 3 sections
  • Page directives environment setup, controls
    registration, assemblies load if not in GAC,
    namespace registration, code language declaration
  • Code section server side business logic can be
    in-lin or separated
  • Page layout page scheleton, including server
    side controls, text, HTM tags

10
Lets build our first application (cont.)
  • Create an empty.ASPX file
  • Prepare scheleton
  • Add controls
  • Make controls server-side
  • ASP.NET runtime parses the page and creates
    instances of .NET framework classes for every
    control where runat server
  • Add
  • Click even handler OnServerClick"MakeItUpper"
  • Chosen Language lt _at_Page Language"C"gt
  • C, VB o C code (which is not sent to the
    client!)

11
Introduction a Visual Studio / VWD
  • Free download from Microsoft website
    http//www.microsoft.com/italy/msdn/prodotti/vs200
    5/editions/download/wdd.mspx
  • Lets explore the IDE
  • Lets create a Web Site
  • Controls and base features
  • Server-side controls whose output depends on
    client
  • Diagnostics page life cycle

12
IDE
13
Controls
  • Controlli HTML
  • Standard HTML
  • lta gt..., ltlabelgt...
  • Server-side controls
  • Generated HTML depends on browser
  • They are tens!! Lets look at some of them

14
Validators
  • Server-side controls to validate input
  • They check if the browser supports client-side
    validation and in this case send JScript to it
  • RequiredFieldValidator
  • ValidatorSummary
  • RangeValidator
  • RegularExpressionValidator
  • CompareValidator
  • CustomValidator (can also be used to send a JS
    function back)

15
Demo
  • Validators

16
Debugging (Server-side)
  • Enabled within the web.config file

17
Debugging (Javascript)
  • A few more steps
  • Use browser settings Tools Internet Options -
    Advanced
  • You can run debugger from IE and then set a
    breakpoint on javascript code
  • Or from Visual Studio attach to process to IE
    process
  • Not supported on Express versions
  • Trick debugger instruciton in the JS code
  • Remember not to leave in production!
  • server-side vs. client-side
  • OnServerClick ? OnClick (you can have both!)
  • ltscript runat"server"gt ? ltscript
    language"javascript" type"text/javascript"gt
  • Linguaggio vb.net/c/c/j/f/cobol.net/ ?
    javascript syntax
  • Il postback happens only if the function returns
    TRUE

18
Pagina Life Cycle (hi level view)
  • PreInit use it to
  • Check IsPostBack property
  • Create dynamic controls
  • Apply themes and master pages dynamically
  • Read/write user profiles
  • Init read and initialize control properties
  • Load read and update control properties
  • PreRender change page contents
  • UnLoad fianal closing tasks

19
Tracing
  • Can be enabled in the web.config or on page level
  • pageOutput enables output to page or by using
    trace

lttrace enabled"true" pageOutput"false" /gt
lt_at_ Page Language"C" ... Trace"true"gt
  • In you need to write a trace information

Trace.Write (categoria, messaggio, eccezione)
Trace.Warn (categoria, messaggio,
eccezione) Trace.Write (messaggio) ...
20
Trace example
21
Membership, rolesand log-in controls
  • Authentication and Permissions

22
Authentication scenarios
  • Identify who is accessing our web site
  • Two tipical scenarios
  • Intranet can leverage integrated server control
    access
  • e.g. IIS uses Integrated Authentication
  • Tipically, users are hosted within the Active
    Directory
  • Users do not need to provide credentials
    explicitly
  • Internet
  • can leverage a database to store users and
    permissions
  • Users must provide username and password

23
Un modello estendibile
Authentication an extensibile model
Controls
Login
LoginStatus
LoginView
Other Login Controls
Membership API
Membership
MembershipUser
Membership Providers
Other Membership Providers
AspNetSqlMembershipProvider
Membership Data
Other Data Stores
SQL Server
24
Log-in controls
  • Interact with a provider for membership
    management
  • Login allows to do a login providing username
    pwd
  • LoginView allows different content for
    authenticated and not-authenticated users
  • PasswordRecovery leverage the secret question to
    regenerate password
  • LoginStatus to check is the user is logged or
    not
  • LoginName provides the current logged user
  • ChangePassword to change password
  • CreateUserWizard to save time in writing lot of
    code!

25
Using Web Site Administration tool (WSA)
  • Parameters are stored in the web.config file
  • Authentication type
  • SMTP server, tracing, debugging, errors, ...
  • Users handler
  • Create, Delete, Update ...
  • Roles and access rules management
  • Folder by folder
  • Provider configuration to access database
  • Can be used through a 7-steps Wizard

26
WSA Security section
27
Membership API by code
MembershipCreateStatus msMembershipUser
userMembership.CreateUser(    mauro",   
Password1!",    mauro.minella_at_microsoft.com", 
  Colore preferito?",    Blu",     true,out
ms) if (usernull)  Label1.Text "Non è
possibile creare un utente"else  Label1.Text
"Utente creato"
if (Membership.ValidateUser(username.Text,
password.Text))  FormsAuthentication.RedirectFrom
LoginPage(username.Text, false)else 
Label1.Text "Username e password non corretti"
28
Demo
  • Web Site Creation
  • Leverage integrated controls
  • Login, LoginName and LoginStatus controls
  • Leverage WSA to create users and groups
  • Leverage IIS Manager to configure WEB server

29
Localizzazione, Temi, Skin e Pagine Master
  • Come creare una grafica del sito
  • omogenea e consistente

30
Localizzazione
  • Usa file di risorse selezionati a run-time da
    ASP.NET
  • Due cartelle
  • App_LocalResources i file contengono risorse per
    una singola pagina
  • App_GlobalResources i file possono essere letti
    da qualsiasi pagina del sito Web
  • Indicazione della localizzazione nelle direttive
    di pagina
  • UICulture"auto"
  • Naming convention per la pagina
  • linguaggio neutrale pagina.aspx.resx
  • linguaggio specifico (es. italiano)
    pagina.aspx.it.resx
  • Naming convention per le risorse
  • metaresourcekey"ResourceXYZ" nelle proprietà
    controllo (tag HTML)
  • NameResourceXYZ.ltProprietàgt e ValueValore nei
    file ltpagegt.resx e ltpagegt.ltlanguagegt.resx
  • Impostare nel browser del client lingua e
    priorità
  • Tipi di risorse stringhe, immagini, audio, file,
    icone, altro
  • DEMO

31
Temi (CSS e Skin)
  • Definiscono la grafica della pagina
  • Sono un superset dei CSS (Cascading Style Sheets)
  • Sono disponibili solo in ASP.NET 2.0
  • Assegnano un insieme di stili e attributi visuali
    agli elementi personalizzabili del sito
  • Sono strettamente legati ai temi di XP impostare
    un tema è rapido e facile come impostare una
    proprietà
  • Si applicano controlli individuali, pagine o siti

32
Creazione di CSS
  • Si usa un tool integrato nell ambiente, che si
    attiva dal menu Stili dopo avere aggiunto un
    file CSS

33
File di Skin - esempio
  • Creo una cartella per ogni stile sotto App_Themes
  • Creo un file per ogni skin nella cartella creata
    sopra
  • In fondo ad ogni file .skin ltasplabel
    runat"server" backColor "Green"
    SkinID"lblTitolo"/gt
  • Definisco uno SkinID altrimenti lo skin viene
    applicato a tutti i controlli di quel tipo, e lo
    seleziono nelle proprietà
  • Imposto lo skin nella direttiva di pagina
    StylesheetTheme
  • Seleziono lo SkinID per il controllo
  • DEMO

34
Pagine Master
Content Page
35
Pagine master
  • Le pagine master definiscono la struttura e i
    placeholder (ltaspContentPlaceHoldergt)
  • Le pagine figlie referenziano la master e
    creano il contenuto (ltaspContentgt)
  • Le pagine master sono trasparenti allutente, il
    quale invoca solo le pagine content

Site.master
default.aspx
http//.../default.aspx
lt_at_ Master gt ltaspContentPlaceHolder
ID"Main" RunAt"server" /gt
lt_at_ Page MasterPage- FileMasterPage.master"
gt ltaspContent ContentPlaceHolderID "Main"
RunAt"server" /gt lt/aspContentgt

36
La proprietà Page.Master
  • Ottiene un riferimento alla pagina master dalla
    pagina figlia
  • Usata per avere accesso programmatico al
    contenuto della pagina master
  • Usare FindControl per weak typing
  • Usere public property nella master page per
    strong typing

37
Accedere ad un Controllo della Master PageWeak
Typing
Nella master page
ltaspLabel ID"Title" RunAt"server" /gt
Nella pagina figlia
((Label) Master.FindControl ("Title")).Text
"Orders"
38
Accedere ad un Controllo della Master PageStrong
Typing
Nella master page
ltaspLabel ID"Title" RunAt"server" /gt . .
. ltscript language"C" runat"server"gt public
string TitleText get return Title.Text
set Title.Text value lt/scriptgt
Nella pagina figlia
Master.TitleText "Orders"
39
Demo Master Pages
  • Creazione di un sito ex-novo (vuoto)
  • Aggiunta una pagina master
  • Aggiunta di due pagine content che usano il
    template della pagina master

40
Sorgenti dati e controlli data-bound
  • Evoluzione delle tecnologie di Data Access da
    ODBC a ADO.NET
  • ADO.NET lo stato dellarte per laccesso ai dati
    con il .NET framework
  • Controlli Data-Bound
  • Dataset accesso a dati disconnessi

41
Evoluzione di accesso ai dati
  • 1993 - ODBC (Open Database Connectivity) API
    uniforme per chiamate SQL a database server
    differenti
  • 1997 - OLE DB COM-based API per sorgenti dati
    esprimibili in forma tabellare
  • il consumer e il provider comunicano attraverso
    COM
  • Principale svantaggio primariamente disegnato
    per C
  • 1999 ADO automazione verso OLE DB
  • vantaggio usufruibile da via automation (VB5/6,
    VBA, ...)
  • svantaggio ridondanza ed efficienza
  • 2001 ADO.NET
  • Modalità disconnessa del data binding (oggetto
    DataSet)
  • Profonda integrazione con XML
  • Integrazione con il resto del .NET framework e
    con Visual Studio .NET
  • Prestazioni

42
Evoluzione di accesso ai dati
43
COM standard interfaces / C headers
OLE DB
Win32 Client
.NET Client
VB/VBA
DLL
OLEDB provider for SQL Server
  • ADO.NET
  • Modalità disconnessa del data binding (oggetto
    DataSet)
  • Profonda integrazione con XML
  • Integrazione con il resto del .NET framework e
    con Visual Studio .NET
  • Prestazioni

COM
automation
ADO
.NET framework via SQLDataSource
DLL
OLEDB provider for ORACLE
ADO.NET
ADO.NET provider for SQL Server
DLL
OLEDB provider for Access
ADO.NET provider for ORACLE
ADO.NET provider for Access
Sql Server
ADO.NET provider for OLEDB
Oracle
Access
44
Controlli DataSource
  • Approccio dichiarativo per ottenere i dati

Nome
Descrizione
SQLDataSource
Connects data-binding controls to SQL databases
through ADO.NET data providers
AccessDataSource
Connects data-binding controls to Access databases
XmlDataSource
Connects data-binding controls to XML data
ObjectDataSource
Connects data-binding controls to data components
SiteMapDataSource
Connects site navigation controls to site map data
45
Provider OLE DB vs. Managed
  • Implementazione interna i provider .NET managed
    offrono un subset di interfacce rispetto a OLE DB
  • Integrazione i provider .NET managed usano tipi
    di dati del Framework .NET (no COM interop layer)
  • Interazione diretta i provider .NET managed
    parlano direttamente con i client, mentre i
    provider OLE DB sono wrappati da OLE DB
  • Data source per ADO.NET
  • SQL Server
  • OLE DB
  • ODBC
  • Oracle

46
Caching dei risultati
ltaspSqlDataSource ID"Countries" RunAt"server"
ConnectionString"serverlocalhostdatabasenorth
wind..." SelectCommand"select distinct
country from customers order by country"
EnableCaching"true" CacheDuration"60"
/gt ltaspDropDownList ID"MyDropDownList"
DataSourceID"Countries" DataTextField"country"
AutoPostBack"true" RunAt"server" /gt
47
Controlli Data-bound
  • Alcuni controlli hanno la capacità di collegarsi
    a sorgenti dati e di rappresentarne il contenuto
  • ListBox, BulletedList, RadioButtonList,
    CheckBoxList
  • TreeView, Menu, FormView, GridView, DetailsView
  • Datalist, Repeater
  • Molte volte basta un semplice Drag Drop !
  • Zero code !

48
ObjectDataSource
  • Permette di creare applicazioni con uno strato in
    più per laccesso ai dati
  • È possibile inserire della business logic
  • Il codice di accesso ai dati è separato dalla UI
  • Binding bidirezionale
  • SelectMethod, InsertMethod, UpdateMethod, and
    DeleteMethod
  • Caching dei risultati opzionale
  • Parametri

49
ACCESSO ai dati in modalità disconnessa
  • DataSet
  • Insieme disconnesso di viste associate ad un nome
  • DataTable
  • Rapppresenta una tabella di dati in memoria
  • Data Adapter
  • Ponte fra il data source e loggetto DataSet
  • Serve per le operazioni di creazione del DataSet
    e aggiornamento del data source

50
DEMO ADO.NET
  • Creazione di un database SQL Server Express
  • Creazione di un dataset e data adapter con un
    metodo pubblico
  • Aggiunta controllo ObjectDataSource e
    associazione al dataset
  • Aggiunta GridView e DetailsView con associazione
    al dataset
  • Filtro griglia tramite DropDownList
  • Inserimento tramite DetailsView
  • Punti di debolezza indirizzabili con AJAX

51
ASP.NET AJAXConcetti e fondamenti
52
AJAX
  • Che cosè e come funziona
  • Da dove partire
  • AJAX ASP.NET Extensions 1.0
  • XMLHttpRequest la base
  • AJAX Control Toolkit
  • AJAX Futures CTP

53
Cosè AJAX?
  • AJAX Asynchronous JavaScript and XML
  • Una nuova tecnica per lo sviluppo di applicazioni
    web
  • Risolve molti dei problemi che affliggono le
    moderne applicazioni web
  • Elimina il flickering delle pagine
  • Usa XmlHttpRequest per recuperare dati dal server
    in modo asincrono e il JavaScript per aggiornare
    il contenuto della pagina
  • Nasce con OWA (Outlook Web Access)
  • Tecnologia abilitante per il Web 2.0

54
AJAX Come funziona?
Il browser invia una richiesta HTTP al server
1
Browser
Web Server
Il server restituisce il contenuto. Il browser ne
fa il rendereing
2
IL browser invia una richiesta asincrona XML-HTTP
al server. La UI non si blocca e non ha effetti
di flickering
3
La richiesta XML-HTTP si conclude. Il JavaScript
aggiorna la porzione della pagina interessata
4
55
(No Transcript)
56
XmlHttpRequest
  • Introdotto nel 1999 con Internet Explorer 5
  • Oggetto ActiveX per le chiamate di callback dal
    Web server
  • In IE 7 fa parte del modello ad oggetti del
    browser
  • Successivamente adottato da Firefox, Safari e
    altri
  • In via di standardizzazione dal W3C
  • http//www.w3.org/TR/XMLHttpRequest/
  • Supportatato oggi da circa il 99 dei browser
  • Circa 85-95 hanno abilitato il JavaScript

57
Instanziare XmlHttpRequest
var xhr null try xhr new
ActiveXObject("Msxml2.XMLHTTP") catch (e)
try xhr new ActiveXObject("Microsoft.
XMLHTTP") catch (e) if
(typeof XMLHttpRequest ! "undefined")
xhr new XMLHttpRequest()
58
Verifica supporto AJAX per il client
xhr.open ('GET', 'AjaxDemo.aspx?modeajax',
true) xhr.onreadystatechange
checkForCompletion xhr.send () ... function
checkForCompletion() if (xhr.readyState
4 xhr.status 200)
window.alert(xhr.responseText)
59
Che cosè Microsoft ASP.NET AJAX ?
  • Un FRAMEWORK per realizzare applicazioni WEB,
    interattive e dalla ricca interfaccia utente
  • Facilita lo sviluppo di applicazioni AJAX
  • Estende e completa ASP.NET 2.0
  • Anche se può essere usato con PHP
  • Multi-browser
  • Estendibile

60
Microsoft AJAX i componenti base
ASP.NET 2.0 AJAX Futures CTPs
ASP.NET AJAX Toolkit
ASP.NET 2.0 AJAX Extensions
Sviluppato con la community
Nuove funzionalità
Server Side
Client Side
Microsoft AJAX Library
  • Supporto Microsoft standard per le ASP.NET 2.0
    AJAX Extension
  • Supporto della comunity per le Futures CTPs ed
    il Toolkit.

61
AJAX da dove partire
62
Componenti essenziali di AJAX ASP.NET
  • Contengono
  • Template AJAX per VS/WD 2005
  • Controlli lato server
  • Ajax Library (JavaScript lato client)
  • Progetto share-source community
  • Esempi già pronti
  • SDK per la creazione di nuovi controlli
  • Richiede ASP.NET Extensions

- Estendono la piattaforma core - Richiedono le
ASP.NET 2.0 AJAX Extensions 1.0 - Aggiungono
funzionalità come - Drag-and-Drop - XML Script -
etc
  • Possono essere utilizzate anche con server non MS
  • Fanno parte di ASP.NET Extensions

63
Microsoft AJAX Library
  • La parte client di ASP.NET 2.0 AJAX
  • Tipicamente installata in ProgramFiles\Microsof
    t ASP.NET\ASP.NET 2.0 AJAX Extensions\v1.0.61025\M
    icrosoftAjaxLibrary
  • Indipendente dal browser e dalla piattaforma
  • Internet Explorer, Firefox, Mozilla, Safari, etc.
  • Si astrae dalla piattaforma sottostante
  • Un JavaScript arricchito
  • Namespaces, classi, interface, ereditarietà, etc.
  • Un sistema dei tipi
  • File .js scaricati una sola volta sul client

64
ASP.NET AJAX 2.0 Extensions UpdatePanel
  • È il controllo ASP.NET AJAX più importante
  • Consente di trasformare facilmente una
    applicazione ASP.NET 2.0 in unapplicazione AJAX
  • Permette di fare il rendering di parte della
    pagina
  • Converte postbacks in chiamate asincrone
  • Aggiorna parte della pagina web con il risultato
  • Non si scrive JavaScript

65
Passo 1Aggiungere lo ScriptManager
Aggiungere ad una pogina aspx
ltaspScriptManager ID"MyScriptManager"
Runat"server" /gt
Lo ScriptManager genera
ltscript src"/.../WebResource.axd?diQ15p6LHcT2T5
QE..." type"text/javascript"gtlt/scriptgt
Riferimento allo script .js da scaricare
66
Passo 2Usare un UpdatePanel
ltaspScriptManager ID"..." Runat"server"
EnablePartialRendering"true" /gt . .
. ltaspUpdatePanel ID"..." Runat"server"gt
ltTriggersgt lt! Se necessario definire dei
trigger--gt lt/Triggersgt ltContentTemplategt
lt! Il contenuto va qui --gt lt/ContentTemplategt lt
/aspUpdatePanelgt
67
Update PanelEstendiamo la piattaforma ASP.NET
68
ASP.NET AJAX Control Toolkit
  • Aggiunge nuovi controlli server ad ASP.NET AJAX
  • Template per la realizzazione di nuovi Extender
  • Sviluppato in collaborazione con la community, in
    Shared Source

69
Da dove partire - 1
70
Da dove partire - 2
71
Da dove partire - 3
72
AJAX Control ToolkitEstendiamo la piattaforma
ASP.NET
73
ASP.NET AJAX Futures CTPs
  • Estende la piattaforma core
  • Richiede le ASP.NET 2.0 AJAX Extensions 1.0
  • Aggiunge funzionalità
  • Drag-and-Drop
  • XML Script
  • etc

74
Quindi ...
  • AJAX Asynchronous JavaScript and XML
  • Applicazioni web più ricche ed interattive
  • ASP.NET AJAX Framework per lo sviluppo con AJAX
  • Microsoft AJAX Library (client-side framework)
  • ASP.NET 2.0 AJAX Extensions (server-side
    framework)
  • ASP.NET AJAX è
  • Ottimizzato per luso su internet
  • Supporta numerosi browser
  • Compatibile con PHP, ColdFusion ed altre
    piattaforme
  • Per lo sviluppo di applicazioni web nei prossimi
    anni
  • Estende ed arrichisce la piattaforma Web
  • da ASP.NET 2.0 a ASP.NET 2.0 AJAX Extensions

75
Link utili
  • About Native XMLHTTP
  • http//msdn.microsoft.com/library/default.asp?url
    /workshop/author/dhtml/overview/aboutxmlhttp.asp
  • Sito ufficiale ASP.NET AJAX
  • http//ajax.asp.net
  • Blogs
  • http//weblogs.asp.net/scottgu
  • http//www.nikhilk.net

76
QA
mauro.minella_at_microsoft.com
Write a Comment
User Comments (0)
About PowerShow.com