Aggiornamento, eliminazione e creazione di dati con associazione di modelli e moduli Web

di Tom FitzMacken

Questa serie di esercitazioni illustra gli aspetti di base dell'uso dell'associazione di modelli con un progetto di Web Forms ASP.NET. L'associazione di modelli rende più semplice l'interazione dei dati rispetto alla gestione di oggetti origine dati, ad esempio ObjectDataSource o SqlDataSource. Questa serie inizia con materiale introduttivo e passa a concetti più avanzati nelle esercitazioni successive.

Questa esercitazione illustra come creare, aggiornare ed eliminare i dati con associazione di modelli. Verranno impostate le proprietà seguenti:

  • Deletemethod
  • InsertMethod
  • Updatemethod

Queste proprietà ricevono il nome del metodo che gestisce l'operazione corrispondente. All'interno di questo metodo viene fornito la logica per interagire con i dati.

Questa esercitazione si basa sul progetto creato nella prima parte della serie.

È possibile scaricare il progetto completo in C# o VB. Il codice scaricabile funziona con Visual Studio 2012 o Visual Studio 2013. Usa il modello di Visual Studio 2012, leggermente diverso dal modello di Visual Studio 2013 illustrato in questa esercitazione.

Obiettivo

In questa esercitazione si apprenderà come:

  1. Aggiungere modelli di dati dinamici
  2. Abilitare l'aggiornamento e l'eliminazione dei dati tramite metodi di associazione di modelli
  3. Applicare le regole di convalida dei dati - Abilitare la creazione di un nuovo record nel database

Aggiungere modelli di dati dinamici

Per offrire la migliore esperienza utente e ridurre al minimo la ripetizione del codice, si useranno modelli di dati dinamici. È possibile integrare facilmente modelli di dati dinamici predefiniti nel sito esistente installando un pacchetto NuGet.

Nell'opzione Gestisci pacchetti NuGet installare DynamicDataTemplatesCS.

modelli di dati dinamici

Si noti che il progetto include ora una cartella denominata DynamicData. In tale cartella sono disponibili i modelli applicati automaticamente ai controlli dinamici nei moduli Web.

cartella dei dati dinamici

Abilitare l'aggiornamento e l'eliminazione

L'abilitazione degli utenti di aggiornare ed eliminare i record nel database è molto simile al processo per il recupero dei dati. Nelle proprietà UpdateMethod e DeleteMethod specificare i nomi dei metodi che eseguono tali operazioni. Con un controllo GridView, è anche possibile specificare la generazione automatica dei pulsanti di modifica ed eliminazione. Il codice evidenziato seguente mostra le aggiunte al codice GridView.

<asp:GridView runat="server" ID="studentsGrid"
    ItemType="ContosoUniversityModelBinding.Models.Student" DataKeyNames="StudentID"
    SelectMethod="studentsGrid_GetData"
    UpdateMethod="studentsGrid_UpdateItem" DeleteMethod="studentsGrid_DeleteItem"
    AutoGenerateEditButton="true" AutoGenerateDeleteButton="true"  
    AutoGenerateColumns="false">

Nel file code-behind aggiungere un'istruzione using per System.Data.Entity.Infrastructure.

using System.Data.Entity.Infrastructure;

Aggiungere quindi i metodi di aggiornamento ed eliminazione seguenti.

public void studentsGrid_UpdateItem(int studentID)
{
    using (SchoolContext db = new SchoolContext())
    {
        Student item = null;
        item = db.Students.Find(studentID);
        if (item == null)
        {
            ModelState.AddModelError("", 
              String.Format("Item with id {0} was not found", studentID));
            return;
        }
              
        TryUpdateModel(item);
        if (ModelState.IsValid)
        {
            db.SaveChanges();
        }
    }
}

public void studentsGrid_DeleteItem(int studentID)
{
    using (SchoolContext db = new SchoolContext())
    {
        var item = new Student { StudentID = studentID };
        db.Entry(item).State = EntityState.Deleted;
        try
        {
            db.SaveChanges();
        }
        catch (DbUpdateConcurrencyException)
        {
            ModelState.AddModelError("", 
              String.Format("Item with id {0} no longer exists in the database.", studentID));
        }
    }
}

Il metodo TryUpdateModel applica i valori associati ai dati corrispondenti dal modulo Web all'elemento dati. L'elemento di dati viene recuperato in base al valore del parametro ID.

Applicare i requisiti di convalida

Gli attributi di convalida applicati alle proprietà FirstName, LastName e Year nella classe Student vengono applicati automaticamente durante l'aggiornamento dei dati. I controlli DynamicField aggiungono convalida client e server in base agli attributi di convalida. Le proprietà FirstName e LastName sono entrambe necessarie. FirstName non può superare i 20 caratteri di lunghezza e LastName non può superare i 40 caratteri. L'anno deve essere un valore valido per l'enumerazione AcademicYear.

Se l'utente viola uno dei requisiti di convalida, l'aggiornamento non procede. Per visualizzare il messaggio di errore, aggiungere un controllo ValidationSummary sopra GridView. Per visualizzare gli errori di convalida dall'associazione di modelli, impostare la proprietà ShowModelStateErrors impostata su true.

<asp:ValidationSummary ShowModelStateErrors="true" runat="server" />

Eseguire l'applicazione Web ed aggiornare ed eliminare uno dei record.

aggiornare i dati

Si noti che quando nella modalità di modifica il valore per la proprietà Year viene eseguito automaticamente come elenco a discesa. La proprietà Year è un valore di enumerazione e il modello di dati dinamico per un valore di enumerazione specifica un elenco a discesa per la modifica. È possibile trovare il modello aprendo il file Enumeration_Edit.ascx nella cartella DynamicData/FieldTemplates .

Se si specificano valori validi, l'aggiornamento viene completato correttamente. Se si viola uno dei requisiti di convalida, l'aggiornamento non procede e viene visualizzato un messaggio di errore sopra la griglia.

messaggio di errore

Aggiungere nuovi record

Il controllo GridView non include la proprietà InsertMethod e pertanto non può essere usata per aggiungere un nuovo record con associazione di modelli. È possibile trovare la proprietà InsertMethod nei controlli FormView, DetailsView o ListView. In questa esercitazione si userà un controllo FormView per aggiungere un nuovo record.

Aggiungere prima di tutto un collegamento alla nuova pagina per l'aggiunta di un nuovo record. Sopra convalidaSummary aggiungere:

<asp:HyperLink NavigateUrl="~/AddStudent" Text="Add New Student" runat="server" />

Il nuovo collegamento verrà visualizzato nella parte superiore del contenuto per la pagina Studenti.

nuovo collegamento

Aggiungere quindi un nuovo modulo Web usando una pagina master e denominarlo AddStudent. Selezionare Site.Master come pagina master.

Verrà eseguito il rendering dei campi per l'aggiunta di un nuovo studente usando un controllo DynamicEntity . Il controllo DynamicEntity esegue il rendering delle proprietà modificabili nella classe specificata nella proprietà ItemType. La proprietà StudentID è stata contrassegnata con l'attributo [ScaffoldColumn(false)] in modo che non venga eseguito il rendering. Nel segnaposto MainContent della pagina AddStudent aggiungere il codice seguente.

<asp:ValidationSummary runat="server" ShowModelStateErrors="true" />
<asp:FormView runat="server" ID="addStudentForm"
    ItemType="ContosoUniversityModelBinding.Models.Student" 
    InsertMethod="addStudentForm_InsertItem" DefaultMode="Insert"
    RenderOuterTable="false" OnItemInserted="addStudentForm_ItemInserted">
    <InsertItemTemplate>
        <fieldset>
            <ol>
                <asp:DynamicEntity runat="server" Mode="Insert" />
            </ol>
            <asp:Button runat="server" Text="Insert" CommandName="Insert" />
            <asp:Button runat="server" Text="Cancel" CausesValidation="false" OnClick="cancelButton_Click" />
        </fieldset>
    </InsertItemTemplate>
</asp:FormView>

Nel file code-behind (AddStudent.aspx.cs), aggiungere un'istruzione using per lo spazio dei nomi ContosoUniversityModelBinding.Models .

using ContosoUniversityModelBinding.Models;

Aggiungere quindi i metodi seguenti per specificare come inserire un nuovo record e un gestore eventi per il pulsante annulla.

public void addStudentForm_InsertItem()
{
    var item = new Student();
            
    TryUpdateModel(item);
    if (ModelState.IsValid)
    {
        using (SchoolContext db = new SchoolContext())
        {
            db.Students.Add(item);
            db.SaveChanges();
        }
    }
}

protected void cancelButton_Click(object sender, EventArgs e)
{
    Response.Redirect("~/Students");
}

protected void addStudentForm_ItemInserted(object sender, FormViewInsertedEventArgs e)
{
    Response.Redirect("~/Students");
}

Salvare tutte le modifiche.

Eseguire l'applicazione Web e creare un nuovo studente.

aggiungere un nuovo studente

Fare clic su Inserisci e notare che è stato creato il nuovo studente.

visualizzare nuovi studenti

Conclusione

In questa esercitazione è stato abilitato l'aggiornamento, l'eliminazione e la creazione di dati. Quando si interagisce con i dati, assicurarsi che le regole di convalida vengano applicate.

Nell'esercitazione successiva in questa serie si abiliterà l'ordinamento, il paging e il filtro dei dati.