Опубликован: 15.06.2011 | Доступ: свободный | Студентов: 701 / 55 | Оценка: 4.25 / 4.00 | Длительность: 14:09:00
Самостоятельная работа 4:

Web Matrix. Работа с данным

Добавление записей в базу данных

1.В текущем проекте создадим еще один CSHTML файл, и назовем его InsertProducts.cshtml:

2.Заменим начальный код страницы InsertProducts.cshtml на:

@{
    var db = Database.Open("SmallBakery");
    var name = Request["Name"];
    var description = Request["Description"];
    var price = Request["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.");
        }        if(ModelState.IsValid)
 {
            var insertQuery = "INSERT INTO Product (name, description, price) " +
                "VALUES (@0, @1, @2)";
            db.Execute(insertQuery, name, description, price);
            Response.Redirect(@Href("/ListProducts"));
        }
    }
}

<!DOCTYPE html>
<html>
<head>
   <title>Add Products</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>Add New Product</h1>
   
   @Html.ValidationSummary()
     
  
 <form method="post" "action=''>
       <fieldset>
           <legend>Add 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="Insert" class="submit" />
           </div>
       </fieldset>
          
   </form>
</body>
</html>

Тег <body></body> содержит HTML форму с тремя текстовыми полями ( text box ) имя продукта, описание продукта, и его стоимость. Когда пользователь жмет на кнопку Insert, создается соединение с базой данных SmallBakery.sdf ( Метод Database.Open ), после чего из формы берутся значения текстовых полей ( text box ).

Для проверки данных, введенных пользователем, используется следующие фрагменты кода:

…
        if (name.IsEmpty()) 
        {
           ModelState.AddError("Name", "Product name is required.");
        }
  	…
        
        if (description.IsEmpty()) 
         {
          ModelState.AddError("Description", 
                "Product description is required.");
         }
        …

        if (price.IsEmpty()) 
        {
          ModelState.AddError("Price", "Product price is required.");
        }
…

И если значение переменой name, description или price пустое, используем метод ModelState.AddError.Далее метод ModelState.IsValid проверяет, все ли данные прошли проверку (в нашем случае, не пустые поля), и если да, то выполняется SQL запрос с параметрами:

if(ModelState.IsValid)
{
var insertQuery = "INSERT INTO Product (name, description, price) " + "VALUES (@0, @1, @2)";
db.Execute(insertQuery, name, description, price);
}

После выполнения запроса страница, с помощью метода Response.Redirect, переадресуется на страницу ListProducts.cshtml.

И в заключении о строчке с методом Html.ValidationSummary(), которая выводит накопленные сообщения об ошибках, а если точнее сообщения которые мы прописали в методе ModelState.AddError.

К примеру, если мы нажмем кнопку "Insert" с пустыми полями, то результатом будет: