Web Matrix. Работа с данным
Редактирование записей в базе данных
1.В текущем проекте создадим CSHTML файл, и назовем его EditProducts.cshtml:
2.Заменим исходный код страницы EditProducts.cshtml на:
@{ var db = Database.Open("SmallBakery"); var selectQueryString = "SELECT * FROM Product ORDER BY Name"; } <!DOCTYPE html> <html> <head> <title>Edit Products</title> <style type="text/css"> table, th, td { border: solid 1px #bbbbbb; border-collapse: collapse; padding: 2px; } </style> </head> <body> <h1>Edit Small Bakery Products</h1> <table> <thead> <tr> <th> </th> <th>Name</th> <th>Description</th> <th>Price</th> </tr> </thead> <tbody> @foreach (var row in db.Query(selectQueryString)) { <tr> <td><a href="@Href("/UpdateProducts", row.id)">Edit</a></td> <td>@row.name</td> <td>@row.description</td> <td>@row.price</td> </tr> } </tbody> </table> </body> </html>
Как можно заметить, код этой страницы похож на код страницы ListProducts.cshtml, созданной ранее, но отличается колонкой с динамически - генерируемыми ссылками на страницу редактирования записей (её мы создадим позднее).
3.Запустим приложение, в результате откроется окно браузера со следующим содержанием:
Ссылки, в первой колонке, будут иметь вид:
http://localhost:28163/UpdateProducts/n
где localhost:28163 – адрес сервера , UpdateProducts страница редактирования , n - номер продукта, который соответствует значению столбца id в базе данных.
4.В текущем проекте создадим CSHTML файл, и назовем его UpdateProducts.cshtml:
5.Заменим исходный код страницы UpdateProducts.cshtml на:
@{ var db = Database.Open("SmallBakery"); var selectQueryString = "SELECT * FROM Product WHERE id=@0"; var productId = UrlData[0]; if (productId.IsEmpty()) { Response.Redirect(@Href("/EditProducts")); } var row = db.QuerySingle(selectQueryString, productId); var name = row.name; var description = row.description; var price = row.price; if (IsPost) { name = Request["Name"]; if (String.IsNullOrEmpty(name)) { ModelState.AddError("Name", "Product name is required."); } description = Request["Description"]; if (String.IsNullOrEmpty(description)) { ModelState.AddError("Description", "Product description is required."); } price = Request["Price"]; if (String.IsNullOrEmpty(price)) { ModelState.AddError("Price", "Product price is required."); } price = Request["price"]; if (price.IsEmpty()) { ModelState.AddError("Price", "Product price is required."); } if(ModelState.IsValid) { var updateQueryString = "UPDATE Product SET name=@0, description=@1, price=@2 WHERE id=@3" ; db.Execute(updateQueryString, name, description, price, productId); Response.Redirect(@Href("/EditProducts")); } } } <!DOCTYPE html> <html> <head> <title>Update Product</title> <style type="text/css"> label { float: left; width: 8em; text-align: right; margin-right: 0.5em;} fieldset { padding: 1em; border: 1px solid; width: 35em;} legend { padding: 2px 4px; border: 1px solid; font-weight: bold;} </style> </head> <body> <h1>Update Product</h1> @Html.ValidationSummary() <form method="post" action="" > <fieldset> <legend>Update Product</legend> <div> <label>Name:</label> <input name="Name" type="text" size="50" value="@name" /> </div> <div> <label>Description:</label> <input name="Description" type="text" size="50" value="@description" /> </div> <div> <label>Price:</label> <input name="Price" type="text" size="50" value="@price" /> </div> <div> <label> </label> <input type="submit" value="Update" class="submit" /> </div> </fieldset> </form> </body> </html> Тег <body></body> содержит HTML форму, в которой будет отображаться результаты SQL запроса с параметром: SELECT * FROM Product WHERE id=@0
Значение параметра будет браться из URL ссылки:
var productId = UrlData[0];
Проверим, содержит ли переменная productId, значения, если нет, то переадресация на страницу EditProducts.cshtml:
if (productId.IsEmpty()) { Response.Redirect(@Href("/EditProducts")); }
Далее используем метод QuerySingle который будет возвращать одну запись запроса:
var row = db.QuerySingle(selectQueryString, productId);
Присваиваем переменным, значения которые содержаться в row:
var name = row.name; var description = row.description; var price = row.price;
Фрагмент кода if(isPost) {…}, будет выполняться, после нажатия на кнопку "Update". В данном фрагменте осуществляется проверка введенных данных, с помощью метода String.IsNullOrEmpty() и выполнение SQL запроса с параметрами на обновление конкретной записи:
var updateQueryString = "UPDATE Product SET name=@0, description=@1, price=@2 WHERE id=@3"; db.Execute(updateQueryString, name, description, price, productId); Response.Redirect(@Href("/EditProducts"));
6.Запустим страницу EditProducts.cshtml и кликнем "Edit" последней записи. После чего отобразиться страница UpdateProducts.cshtm: