Технологии Microsoft для создания RIA-приложений

Web Matrix. Работа с изображениями. Добавление функции поиск

Разбить на страницы
Показывать лекцию целиком

Динамическое добавление изображений на веб – страниц

1.Cоздадим в WebMatrix новый сайт на основе шаблона EmtySite ( Пустой сайт ):

(рис 12.1)

2.Перейдем в рабочее пространство "Файлы". Добавим новую страницу в проект и назовем ее DynamicImage.cshtml:

(рис 12.2)

3.Создадим, папку в проекте и назовем ее "image":

(рис 12.3)

4.Добавим в папку "image", четыре изображения и переименуем в image1.jpg, image2.jpg, image3.jpg, image4.jpg:

(рис 12.4)

5.Изменим начальный код страницы DynamicImage.cshtml на:

@{  
    var imagePath= "";
    if( Request["imageChoice"] != null)
      {	
        imagePath = @"image\" + Request["imageChoice"];
      }
 }

<!DOCTYPE html>
<html>
<head>
  <title>Images</title>
</head>
<body>
<form method="post" action="">
    <div>
        I want to see:
        <select name="imageChoice">
            <option value="image1.jpg">Image 1</option>
            <option value="image2.jpg">Image 2</option>
            <option value="image3.jpg">Image 3</option>
            <option value="image4.jpg">Image 4</option>
        </select>    
         
        <input type="submit" value="Submit" /> 
    </div>
    <div style="padding:10px;">
        @if(imagePath != "")
        {
            <img src="@imagePath" alt="Sample Image" width="300px" />
        }
    </div>
</form>
</body></html>

В теге <body></body> расположен элемент управления - выпадающий список ( drop-down list ) c именем imageChoice. Список содержит четыре значения ( option ) с атрибутом value, которому присваиваются имена файлов и их расширение (в нашем случае .jpg ):

<select name="imageChoice">
            <option value="image1.jpg">Image 1</option>
            <option value="image2.jpg">Image 2</option>
            <option value="image3.jpg">Image 3</option>
            <option value="image4.jpg">Image 4</option>
        </select>

При выборе из выпадающего списка, нужного значения (в нашем случае картинки), и нажатии кнопки Submit, в код из объекта Request["imageChoice", передается значение атрибута (выпадающего списка) value. С помощью переменной imagePath формируется путь к файлу (в нашем случае переменная будет содержать значение image/image1.jpg ):

@{  
    var imagePath= "";
    if( Request["imageChoice"] != null)
      {	
        imagePath = @"image\" + Request["imageChoice"];
      }
 }

Значение переменной imagePath передается HTML элементу < img></img>:

<img src="@imagePath" alt="Sample Image" width="300px" />

Запустим приложение, выберем из списка "image 1" и нажмем кнопку "Submit". В браузере отобразиться выбранное изображение:

(рис 12.5)

Загрузка изображений на сервер

1.Добавим к проекту новую страницу и назовем ее UploadImage.cshtml:

(рис 12.6)

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

@{  WebImage img = null;
    var newFileName = "";
    var imagePath = "";
     
    if(IsPost){
        img = WebImage.GetImageFromRequest();
        if(img != null){
            newFileName = Path.GetFileName(img.FileName);
            imagePath = @"image\" + newFileName;
             
            img.Save(@"~\" + imagePath);
       }
    }
}

<!DOCTYPE html>
<html>
<head>
  <title>Image Upload</title>
</head>
<body>
  <form action="" method="post" enctype="multipart/form-data">
    <fieldset>
      <legend> Upload Image </legend>
      <label for="Image">Image</label>
      <input type="file" name="Image" />
      <br/>
      <input type="submit" value="Upload" />
    </fieldset>
  </form>
  <h1>Uploaded Image</h1>
    @if(imagePath != ""){
    <div class="result"> 
        <img src="@imagePath" alt="image" />
         
    </div>
    }
</body>
</html>

В теге <body></body> используется HTML элемент управления для загрузки файлов:

<input type="file" name="Image" />
(рис 12.7)

Что бы получить загруженное изображение используется класс WebImage, который содержит различные методы для работы с изображением. В частности метод WebImage.GetImageFromRequest получает загруженное изображение и присваивает переменной img:

img = WebImage.GetImageFromRequest();

Свойство FileName возвращает имя файла, включая путь до этого файла:

C:\Users\Public\Pictures\Sample Pictures\image5.jpg

Метод Path.GetFileName, возвращает имя файла и расширение указанной строки пути:

newFileName = Path.GetFileName(img.FileName);

Для сохранения изображения в папку используется метод Save, класса WebImage:

imagePath = @"image\" + newFileName;  
            img.Save(@"~\" + imagePath);

Символы @"~\" указывают на текущее расположение проекта.

3.Запустим проект, выберем какое-нибудь изображение, и нажмем кнопку "Submit". Загруженное изображение отобразиться в окне браузера:

(рис 12.8)

Проверим, загрузилось ли изображение в папку проекта - "image". Для этого правой кнопкой мыши, щелкнем на папке "image" выберем "обновить":

(рис 12.9)

Загруженное изображение отобразиться в списке:

(рис 12.10)

Изменение размеров изображения

1.Добавим к проекту новую страницу и назовем ее Thumbnail.cshtml

(рис 12.11)

2.В папке image, создадим папку в которую будут помещаться уменьшенные версии изображений thumbs:

(рис 12.12)

3.Изменим начальный код страницы Thumbnail.cshtml на:

@{  WebImage img = null;
    var newFileName = "";
    var imagePath = "";
    var imageThumbPath  = "";
     
    if(IsPost)
{
        img = WebImage.GetImageFromRequest();
        if(img != null)
   {
            newFileName = Path.GetFileName(img.FileName);
            imagePath = @"image\" + newFileName;
            img.Save(@"~\" + imagePath);
            imageThumbPath = @"image\thumbs\" + newFileName;
     img.Resize(width: 60, height: 60);
            img.Save(@"~\" + imageThumbPath);     
   }
 }
}

<!DOCTYPE html>
<html>
<head>
  <title>Resizing Image</title>
</head>
<body>
<h1>Thumbnail Image</h1>
  <form action="" method="post" enctype="multipart/form-data">
    <fieldset>
      <legend> Creating Thumbnail Image </legend>
      <label for="Image">Image</label>
      <input type="file" name="Image" />
      <br/>
      <input type="submit" value="Submit" />
    </fieldset>
  </form>
    @if(imagePath != "")
     {
        <img src="@imageThumbPath" alt="Thumbnail image" />
        <a href="@imagePath" target="_Self">
        View full size
        </a>    
    }
</body>
</html>

Данный код похож на код из пункта "Загрузка изображений на сервер", отличается только тем, что изображение загружается дважды. В папку image помещается обычного размера изображение, в папку thumbs с помощью метода Resize, уменьшенная копия изображения (в нашем примере изображение размера 60x60 пикселей):

imageThumbPath = @"image\thumbs\" + newFileName;
 img.Resize(width: 60, height: 60);
 img.Save(@"~\" + imageThumbPath);

Отобразим уменьшенную версию изображения на страницу и разместим ссылку на изображение оригинального размера:

<img src="@imageThumbPath" alt="Thumbnail image" />
        <a href="@imagePath" target="_Self">
        View full size
        </a>

4.Запустим проект, выберем какое-нибудь изображение, и нажмем кнопку "Submit". Загруженное изображение в уменьшенном виде отобразиться в окне браузера:

(рис 12.13)

Кликнем на ссылку "View full size". Браузер откроет новое окно с изображением исходного размера:

(рис 12.14)

Изменение расположения изображения

1.Добавим к проекту новую страницу и назовем ее Flip.cshtml:

(рис 12.15)

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

@{  var imagePath= "";
    WebImage img = new WebImage(@"~\image\image5.jpg");
    if(img != null)
    {
        imagePath = @"image\image5.jpg";
        img.FlipVertical();
        img.Save(@"~\" + imagePath);
     }
}

<!DOCTYPE html>
<html>
<head>
  <title>Get Image From File</title>
</head>
<body>
<h1>Flip Image Vertically</h1>
@if(imagePath != "")
 {
    <img src="@imagePath" alt="Image" />
 }
</body>
</html>

В данном фрагменте кода используется метод класса WebImage - FlipVertical (так же для манипуляции с изображением можно использовать методы: RotateLeft и RotateRight для вращения по часовой против часовой. И метод аналогичный методу FlipVertical- FlipHorizontal который отображает зеркально изображение).

3.Запустим проект, в браузере отобразиться:

(рис 12.16)

При обновлении страницы, метод FlipVertical выполниться повторно и вернет изображение в исходное состояние:

(рис 12.17)

Добавление функций "Search Site" и "Search Web"

В данной части практического занятия будет рассмотрено, размещение на сайте специального плагина-поисковика. (данный плагин работает только с поисковой системой http://www.bing.com):

(рис 12.18)

1.Для того что бы плагин работал необходимо предварительно подключить специальную библиотеку ASP.NET Web Helpers Library.Для этого перейдем в рабочее пространство ( workspace ) "Сайт" и выберем "Администрирование веб-страниц ASP.NET":

(рис 12.19)

2.Откроется окно браузера, где необходимо ввести пароль (для каждого нового проекта эта операция будет проводиться повторно):

(рис 12.20)

После ввода пароля в браузере отобразиться (Окно браузера закрывать ненужно):

(рис 12.21)

3.Перейдем в WebMatrix далее рабочее пространство ( workspace ) "Файлы" и обновим содержание проекта:

(рис 12.22)

4.После обновления проекта появится папка App_Data с файлом "_Password.config":

(рис 12.23)

5.Переименуем "_Password.config" в "Password.config":

(рис 12.24)

6.Перейдем в окно браузера и перейдем по ссылке:

(рис 12.25)

7.После ввода пароля, в браузере отобразиться список доступных расширений:

(рис 12.26)

8.Выбираем в списке пакет ASP.NET Web Helpers (на момент написания курса актуальная версия 1.1) и жмем установить:

(рис 12.27)

После установки появится сообщение, что пакет успешно установлен:

(рис 12.28)

9.Теперь закроем окно браузера. В WebMatrix создадим новый файл и назовем его Search.cshtml (Файл создается в проекте ImageSearch ):

(рис 12.29)

10.Изменим начальный код страницы Search.cshtml на:

<!DOCTYPE html>
<html>
    <head>
        <title>Custom Bing Search Box</title>
    </head>
    <body>

    <div>
       <h1>Simple Search</h1>
       @Bing.SearchBox()
    </div>

    <div>
       <h1>Advanced Search Option</h1>
        @Bing.AdvancedSearchBox(
            boxWidth: "300px",
            resultWidth: 600,
            resultHeight: 900,
            themeColor: "Green",
            locale: "ru-RU")
        </div>
    </body>
</html>

В теге <body></body> используются два метода: Bing.SearchBox который открывает окно браузера с результатами поиска в системе bing:

(рис 12.30)

И метод Bing.AdvancedSearchBox, результаты работы отображены ниже:

(рис 12.31)
Страницы:

Динамическое добавление изображений на веб – страниц

1.Cоздадим в WebMatrix новый сайт на основе шаблона EmtySite ( Пустой сайт ):

(рис 12.1)

2.Перейдем в рабочее пространство "Файлы". Добавим новую страницу в проект и назовем ее DynamicImage.cshtml:

(рис 12.2)

3.Создадим, папку в проекте и назовем ее "image":

(рис 12.3)

4.Добавим в папку "image", четыре изображения и переименуем в image1.jpg, image2.jpg, image3.jpg, image4.jpg:

(рис 12.4)

5.Изменим начальный код страницы DynamicImage.cshtml на:

@{  
    var imagePath= "";
    if( Request["imageChoice"] != null)
      {	
        imagePath = @"image\" + Request["imageChoice"];
      }
 }

<!DOCTYPE html>
<html>
<head>
  <title>Images</title>
</head>
<body>
<form method="post" action="">
    <div>
        I want to see:
        <select name="imageChoice">
            <option value="image1.jpg">Image 1</option>
            <option value="image2.jpg">Image 2</option>
            <option value="image3.jpg">Image 3</option>
            <option value="image4.jpg">Image 4</option>
        </select>    
         
        <input type="submit" value="Submit" /> 
    </div>
    <div style="padding:10px;">
        @if(imagePath != "")
        {
            <img src="@imagePath" alt="Sample Image" width="300px" />
        }
    </div>
</form>
</body></html>

В теге <body></body> расположен элемент управления - выпадающий список ( drop-down list ) c именем imageChoice. Список содержит четыре значения ( option ) с атрибутом value, которому присваиваются имена файлов и их расширение (в нашем случае .jpg ):

<select name="imageChoice">
            <option value="image1.jpg">Image 1</option>
            <option value="image2.jpg">Image 2</option>
            <option value="image3.jpg">Image 3</option>
            <option value="image4.jpg">Image 4</option>
        </select>

При выборе из выпадающего списка, нужного значения (в нашем случае картинки), и нажатии кнопки Submit, в код из объекта Request["imageChoice", передается значение атрибута (выпадающего списка) value. С помощью переменной imagePath формируется путь к файлу (в нашем случае переменная будет содержать значение image/image1.jpg ):

@{  
    var imagePath= "";
    if( Request["imageChoice"] != null)
      {	
        imagePath = @"image\" + Request["imageChoice"];
      }
 }

Значение переменной imagePath передается HTML элементу < img></img>:

<img src="@imagePath" alt="Sample Image" width="300px" />

Запустим приложение, выберем из списка "image 1" и нажмем кнопку "Submit". В браузере отобразиться выбранное изображение:

(рис 12.5)

Загрузка изображений на сервер

1.Добавим к проекту новую страницу и назовем ее UploadImage.cshtml:

(рис 12.6)

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

@{  WebImage img = null;
    var newFileName = "";
    var imagePath = "";
     
    if(IsPost){
        img = WebImage.GetImageFromRequest();
        if(img != null){
            newFileName = Path.GetFileName(img.FileName);
            imagePath = @"image\" + newFileName;
             
            img.Save(@"~\" + imagePath);
       }
    }
}

<!DOCTYPE html>
<html>
<head>
  <title>Image Upload</title>
</head>
<body>
  <form action="" method="post" enctype="multipart/form-data">
    <fieldset>
      <legend> Upload Image </legend>
      <label for="Image">Image</label>
      <input type="file" name="Image" />
      <br/>
      <input type="submit" value="Upload" />
    </fieldset>
  </form>
  <h1>Uploaded Image</h1>
    @if(imagePath != ""){
    <div class="result"> 
        <img src="@imagePath" alt="image" />
         
    </div>
    }
</body>
</html>

В теге <body></body> используется HTML элемент управления для загрузки файлов:

<input type="file" name="Image" />
(рис 12.7)

Что бы получить загруженное изображение используется класс WebImage, который содержит различные методы для работы с изображением. В частности метод WebImage.GetImageFromRequest получает загруженное изображение и присваивает переменной img:

img = WebImage.GetImageFromRequest();

Свойство FileName возвращает имя файла, включая путь до этого файла:

C:\Users\Public\Pictures\Sample Pictures\image5.jpg

Метод Path.GetFileName, возвращает имя файла и расширение указанной строки пути:

newFileName = Path.GetFileName(img.FileName);

Для сохранения изображения в папку используется метод Save, класса WebImage:

imagePath = @"image\" + newFileName;  
            img.Save(@"~\" + imagePath);

Символы @"~\" указывают на текущее расположение проекта.

3.Запустим проект, выберем какое-нибудь изображение, и нажмем кнопку "Submit". Загруженное изображение отобразиться в окне браузера:

(рис 12.8)

Проверим, загрузилось ли изображение в папку проекта - "image". Для этого правой кнопкой мыши, щелкнем на папке "image" выберем "обновить":

(рис 12.9)

Загруженное изображение отобразиться в списке:

(рис 12.10)

Изменение размеров изображения

1.Добавим к проекту новую страницу и назовем ее Thumbnail.cshtml

(рис 12.11)

2.В папке image, создадим папку в которую будут помещаться уменьшенные версии изображений thumbs:

(рис 12.12)

3.Изменим начальный код страницы Thumbnail.cshtml на:

@{  WebImage img = null;
    var newFileName = "";
    var imagePath = "";
    var imageThumbPath  = "";
     
    if(IsPost)
{
        img = WebImage.GetImageFromRequest();
        if(img != null)
   {
            newFileName = Path.GetFileName(img.FileName);
            imagePath = @"image\" + newFileName;
            img.Save(@"~\" + imagePath);
            imageThumbPath = @"image\thumbs\" + newFileName;
     img.Resize(width: 60, height: 60);
            img.Save(@"~\" + imageThumbPath);     
   }
 }
}

<!DOCTYPE html>
<html>
<head>
  <title>Resizing Image</title>
</head>
<body>
<h1>Thumbnail Image</h1>
  <form action="" method="post" enctype="multipart/form-data">
    <fieldset>
      <legend> Creating Thumbnail Image </legend>
      <label for="Image">Image</label>
      <input type="file" name="Image" />
      <br/>
      <input type="submit" value="Submit" />
    </fieldset>
  </form>
    @if(imagePath != "")
     {
        <img src="@imageThumbPath" alt="Thumbnail image" />
        <a href="@imagePath" target="_Self">
        View full size
        </a>    
    }
</body>
</html>

Данный код похож на код из пункта "Загрузка изображений на сервер", отличается только тем, что изображение загружается дважды. В папку image помещается обычного размера изображение, в папку thumbs с помощью метода Resize, уменьшенная копия изображения (в нашем примере изображение размера 60x60 пикселей):

imageThumbPath = @"image\thumbs\" + newFileName;
 img.Resize(width: 60, height: 60);
 img.Save(@"~\" + imageThumbPath);

Отобразим уменьшенную версию изображения на страницу и разместим ссылку на изображение оригинального размера:

<img src="@imageThumbPath" alt="Thumbnail image" />
        <a href="@imagePath" target="_Self">
        View full size
        </a>

4.Запустим проект, выберем какое-нибудь изображение, и нажмем кнопку "Submit". Загруженное изображение в уменьшенном виде отобразиться в окне браузера:

(рис 12.13)

Кликнем на ссылку "View full size". Браузер откроет новое окно с изображением исходного размера:

(рис 12.14)

Изменение расположения изображения

1.Добавим к проекту новую страницу и назовем ее Flip.cshtml:

(рис 12.15)

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

@{  var imagePath= "";
    WebImage img = new WebImage(@"~\image\image5.jpg");
    if(img != null)
    {
        imagePath = @"image\image5.jpg";
        img.FlipVertical();
        img.Save(@"~\" + imagePath);
     }
}

<!DOCTYPE html>
<html>
<head>
  <title>Get Image From File</title>
</head>
<body>
<h1>Flip Image Vertically</h1>
@if(imagePath != "")
 {
    <img src="@imagePath" alt="Image" />
 }
</body>
</html>

В данном фрагменте кода используется метод класса WebImage - FlipVertical (так же для манипуляции с изображением можно использовать методы: RotateLeft и RotateRight для вращения по часовой против часовой. И метод аналогичный методу FlipVertical- FlipHorizontal который отображает зеркально изображение).

3.Запустим проект, в браузере отобразиться:

(рис 12.16)

При обновлении страницы, метод FlipVertical выполниться повторно и вернет изображение в исходное состояние:

(рис 12.17)

Добавление функций "Search Site" и "Search Web"

В данной части практического занятия будет рассмотрено, размещение на сайте специального плагина-поисковика. (данный плагин работает только с поисковой системой http://www.bing.com):

(рис 12.18)

1.Для того что бы плагин работал необходимо предварительно подключить специальную библиотеку ASP.NET Web Helpers Library.Для этого перейдем в рабочее пространство ( workspace ) "Сайт" и выберем "Администрирование веб-страниц ASP.NET":

(рис 12.19)

2.Откроется окно браузера, где необходимо ввести пароль (для каждого нового проекта эта операция будет проводиться повторно):

(рис 12.20)

После ввода пароля в браузере отобразиться (Окно браузера закрывать ненужно):

(рис 12.21)

3.Перейдем в WebMatrix далее рабочее пространство ( workspace ) "Файлы" и обновим содержание проекта:

(рис 12.22)

4.После обновления проекта появится папка App_Data с файлом "_Password.config":

(рис 12.23)

5.Переименуем "_Password.config" в "Password.config":

(рис 12.24)

6.Перейдем в окно браузера и перейдем по ссылке:

(рис 12.25)

7.После ввода пароля, в браузере отобразиться список доступных расширений:

(рис 12.26)

8.Выбираем в списке пакет ASP.NET Web Helpers (на момент написания курса актуальная версия 1.1) и жмем установить:

(рис 12.27)

После установки появится сообщение, что пакет успешно установлен:

(рис 12.28)

9.Теперь закроем окно браузера. В WebMatrix создадим новый файл и назовем его Search.cshtml (Файл создается в проекте ImageSearch ):

(рис 12.29)

10.Изменим начальный код страницы Search.cshtml на:

<!DOCTYPE html>
<html>
    <head>
        <title>Custom Bing Search Box</title>
    </head>
    <body>

    <div>
       <h1>Simple Search</h1>
       @Bing.SearchBox()
    </div>

    <div>
       <h1>Advanced Search Option</h1>
        @Bing.AdvancedSearchBox(
            boxWidth: "300px",
            resultWidth: 600,
            resultHeight: 900,
            themeColor: "Green",
            locale: "ru-RU")
        </div>
    </body>
</html>

В теге <body></body> используются два метода: Bing.SearchBox который открывает окно браузера с результатами поиска в системе bing:

(рис 12.30)

И метод Bing.AdvancedSearchBox, результаты работы отображены ниже:

(рис 12.31)
Вернуться к учебному плану