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:



