corso 2008

tecniche

.NET

file di configurazione

il sistema cerca sequenzialmente nei file:
    
machine.config del framework
web.config del framework
web.config del sito
web.config della directory virtuale

IntelliSense

Se non si attiva automaticamente, richiamarlo con
    
Ctrl-Spazio
Ctrl-Y

documentazione

Se si inizia una riga con ''' IntelliSense apre e stimola documentazione
    
    ''' <summary>
    ''' 
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
Se si valorizzano questi tag, sarà possibile generare automaticamente la documentazione

validazione dell'input

La validazione viene fatta sia a lato client (per evitare il ricaricamento per cose banali. ma che può essere evitato, disabilitando gli script o facendo spoofing, cioè scrivendo a mano i messaggi HTTP), che a lato server (ripete la validazione lato client, poi esegue la vera validazione, cioè confrontando con dati del server)
ASP.NET consente molti controlli: contro valori, anche di altri controlli, contro una formula dell'utente, contro un range, contro una espressione regolare e dà un unico report.

Sintassi comune: oggetto da validare:
<asp:TextBox id="txtName" runat="server" />
validatore generico:
<asp:Type_of_Validator id="Validator_id" runat="server" ControlToValidate="txtName" ErrorMessage="Message_for_error_summary" Display="static|dynamic|none" Text="Text_to_display_by_input_control"> </asp:Type_of_Validator>

pagine protette

Nella pagina base inizializzo una variabile che potrà essere ridefinita nelle classi specializzate (pagine che ereditano da questa)
Public Class Pagina
    Inherits System.Web.UI.Page

    Protected Overridable ReadOnly Property Riservata() As Boolean
        Get
            Return False
        End Get
    End Property
Nella pagina specializzata posso ridefinire la variabile utilizzando il polimorfismo
Partial Class Libri
    Inherits BasePage

    Protected Overrides ReadOnly Property Riservata() As Boolean
        Get
            Return True
        End Get
    End Property

data helper

E' efficiente creare una classe in cui mettere le azioni sul db, soprattutto i lookup, che così vengono memorizzati in variabili sempre pronte all'uso (Prprietà Statiche)
per convenzione le variabili private cominciano con _ o m_ (m come memory)
Imports Microsoft.VisualBasic

Public Class DataHelper

    Private Shared m_generi As Dati.GeneriDataTable

    Public Shared ReadOnly Property LookupGeneri() As Dati.GeneriDataTable
        Get
            If m_generi Is Nothing Then
                m_generi = New DatiTableAdapters.GeneriTableAdapter().GetData()
            End If
            Return m_generi
        End Get
    End Property
    
    ''' 
    ''' svuota la memoria di tutte le proprietà statiche
    ''' 
    ''' 
    Public Shared Sub InvalidaLookups()
        m_generi = Nothing
    End Sub

    Public Shared Function GetUser(ByVal username As String, ByVal password As String) As Dati.UtentiRow
        Dim Adapter As New DatiTableAdapters.UtentiTableAdapter()
        Dim dt As Dati.UtentiDataTable
        dt = Adapter.GetDataByUserAndPassword(username, password)
        If dt.Count = 0 Then
            Return Nothing
        Else
            Return dt(0)
        End If
    End Function

    Public Shared Sub PrenotaLibro(ByVal user As String, ByVal libro As Integer)

        Dim adapter As New DatiTableAdapters.CodaRichiesteTableAdapter()
        '   vogliamo aggiungere una riga, quindi la creiamo
        Dim dt As Dati.CodaRichiesteDataTable
        dt = New Dati.CodaRichiesteDataTable()
        '   poi la riempiamo
        dt.AddCodaRichiesteRow(user, libro, Now(), Now().AddMonths(2))
        '   e infine la scriviamo
        adapter.Update(dt)

    End Sub

    Public Shared Sub InserisciLibro(ByVal titolo As String, ByVal autore As String, ByVal genere As Integer, ByVal isbn As String, ByVal dataPubb As Date)
        Dim adapter As New DatiTableAdapters.LibriTableAdapter()
        Dim dt As New Dati.LibriDataTable()
        dt.AddLibriRow(isbn, titolo, autore, genere, dataPubb)
        adapter.Update(dt)
    End Sub
End Class


home