Aggiungere un nuovo elemento al database
Scaricare il progetto completato
In questa sezione si aggiungerà la possibilità agli utenti di creare un nuovo libro. In app.js aggiungere il codice seguente al modello di visualizzazione:
self.authors = ko.observableArray();
self.newBook = {
Author: ko.observable(),
Genre: ko.observable(),
Price: ko.observable(),
Title: ko.observable(),
Year: ko.observable()
}
var authorsUri = '/api/authors/';
function getAuthors() {
ajaxHelper(authorsUri, 'GET').done(function (data) {
self.authors(data);
});
}
self.addBook = function (formElement) {
var book = {
AuthorId: self.newBook.Author().Id,
Genre: self.newBook.Genre(),
Price: self.newBook.Price(),
Title: self.newBook.Title(),
Year: self.newBook.Year()
};
ajaxHelper(booksUri, 'POST', book).done(function (item) {
self.books.push(item);
});
}
getAuthors();
In Index.cshtml sostituire il markup seguente:
<div class="col-md-4">
<!-- TODO: Add new book -->
</div>
Con:
<div class="col-md-4">
<div class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">Add Book</h2>
</div>
<div class="panel-body">
<form class="form-horizontal" data-bind="submit: addBook">
<div class="form-group">
<label for="inputAuthor" class="col-sm-2 control-label">Author</label>
<div class="col-sm-10">
<select data-bind="options:authors, optionsText: 'Name', value: newBook.Author"></select>
</div>
</div>
<div class="form-group" data-bind="with: newBook">
<label for="inputTitle" class="col-sm-2 control-label">Title</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="inputTitle" data-bind="value:Title"/>
</div>
<label for="inputYear" class="col-sm-2 control-label">Year</label>
<div class="col-sm-10">
<input type="number" class="form-control" id="inputYear" data-bind="value:Year"/>
</div>
<label for="inputGenre" class="col-sm-2 control-label">Genre</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="inputGenre" data-bind="value:Genre"/>
</div>
<label for="inputPrice" class="col-sm-2 control-label">Price</label>
<div class="col-sm-10">
<input type="number" step="any" class="form-control" id="inputPrice" data-bind="value:Price"/>
</div>
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
</div>
</div>
</div>
Questo markup crea un modulo per inviare un nuovo autore. I valori per l'elenco a discesa autore sono associati ai authors
dati osservabili nel modello di visualizzazione. Per gli altri input del modulo, i valori sono associati alla newBook
proprietà del modello di visualizzazione.
Il gestore di invio nel modulo è associato alla addBook
funzione:
<form class="form-horizontal" data-bind="submit: addBook">
La addBook
funzione legge i valori correnti degli input del modulo associati ai dati per creare un oggetto JSON. Quindi posta l'oggetto JSON in /api/books
.