- •Раздел 1 2
- •Раздел 2 6
- •Раздел 3 7
- •Раздел 4 17
- •Раздел 1 Описание технологии asp.Net
- •История asp.Net
- •Принципы asp.Net
- •Назначение
- •Преимущества asp.Net перед asp
- •Паттерн mvc
- •Концепция Модель
- •Представление
- •Контроллер
- •Функциональные возможности и расхождения
- •Раздел 2 Техническое задание Разработка web-приложения для размещения объявления о продажах
- •Раздел 3 Этапы создания приложения Выбор системы и инструментов разработки
- •Описание структуры приложения
- •Описание приложения Модель
- •Контроллеры
- •Представления
- •Пример использования приложения
- •Раздел 4 Вывод
- •Список литературы
Описание структуры приложения
T
estAspNet45-
название приложения
Views- Пример использования отдельной папки для представлений.
Site1.Master- Пример использования возможности шаблонов представлений, или мастер-страниц, как говорится в литературе ASP.NET.
Default.aspx- является представлением страницы добавления новых объявлений
Default.aspx.cs- контроллер представления Default.aspx
Summary.aspx- является представлением страницы добавления новых объявлений
Summary.aspx.cs- контроллер представления Summary.aspx
Style.css- файл каскадных таблиц стилей всего приложения
TestClass.cs- модель приложения, описывающая переменные, использующиеся для хранения информации об объявлениях в приложении, и возможности взаимодействия с ними
Repository.cs- модель приложения, описывающая функции для работы с хранилищем, описанным в модели TestClass
Описание приложения Модель
TestClass.cs модель, описывающая объекты, с которыми будет взаимодействовать приложение. Аналогично, таблице реляционной базы данных.
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace TestAspNet45
{
public class TestClass
{
public string Id { get; set; } //Номер объявления
[Required] //Параметр валидации поля
public string Title { get; set; } //заголовок объявления
[Required]
public string Body { get; set; } //Текст объявления
[Required]
public string Phone { get; set; } //Номер телефона
public bool? WillAttend { get; set; } //параметр актуальности объявления
}
}
Repository.cs модель, описывающая функции взаимодействия с объектами модели, содержащими данные, которые хранит приложение.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace TestAspNet45
{
public class Repository //модель с механизмами взаимодействия с хранилищем
{
private static Repository repository = new Repository(); //Создание экземпляра класса модели взаимодействия
private List<TestClass> responses = new List<TestClass>(); //Список объектов модели хранилища
public static Repository GetRepository() { // "Геттер", функция для получения хранилища
return repository;
}
public IEnumerable<TestClass> GetAllResponses() { // "Геттер", функция для получения перебора объектов хранилища
return responses;
}
public void AddResponse(TestClass response) { //Добавление объекта в хранилище
responses.Add(response);
}
}
}
Контроллеры
Summary.aspx.cs контроллер главной страницы, формирующий динамический контент, расширяя страницу шаблон(мастер-страницу). В связке Viewer-Controller Summary применено 2 способа формирования динамического контента- в Представлении(не правильно), и в Контроллере(правильно).
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace TestAspNet45
{
public partial class Summary : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{}
protected string GetNoShowHtml() //Пример вывода дигнамической разметки из контроллера
{
StringBuilder html = new StringBuilder(); //создание строки
var noData = Repository.GetRepository().GetAllResponses().Where(i => !i.WillAttend.Value); //Получение значений из хранилища по ключу
foreach (var rsvp in noData) { //Перебор значений
html.Append(String.Format("<div>" +
"<h3> Тема: {1} </h3> </ br>" +
"<p>{2}</p> </ br>" +
"<h3> Номер телефона: {3} </h3>   <a href=Default.aspx?id={0}>Убрать?</a>" +
"</div>", rsvp.Id, rsvp.Title, rsvp.Body, rsvp.Phone)); //Формирование динамической разметки
}
return html.ToString(); //возврат строки в представление
}
}
}
Default.aspx.cs Контроллер страницы добавления контента. Отвечает за создание новых объектов в хранилище, и смены флага активности объявления. Показывает способы обработки Get и Post запросов.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.ModelBinding;
namespace TestAspNet45
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e) //Функиця, отвечающая за дейсвтие при загрузке страницы
{
if (IsPostBack) // Если приходит Post-данные, например кнопка send формы
{
TestClass rsvp = new TestClass(); //создание экземпляра модели
if (TryUpdateModel(rsvp, new FormValueProvider(ModelBindingExecutionContext))) //попытка заполнить поля модели данными из формы
{
rsvp.Id = Repository.GetRepository().GetAllResponses().Count().ToString(); //Создание порядкового номера
rsvp.WillAttend = true; //Активация объявления
Repository.GetRepository().AddResponse(rsvp); //добавление объекта в хранилище
Response.Redirect("Summary.aspx"); //редирект на главную страницу
}
}
if (Request.QueryString["id"] != null) { //Если страница открывается с параметром id
string id = Request.QueryString["id"];
var noData = Repository.GetRepository().GetAllResponses().Where(i => i.WillAttend.Value); //то получаем из хранилища объекты с активными объявлениями
foreach(var r in noData) //перебираем
{
if (r.Id == id) //и ищем значения, равные параметру id
{
r.WillAttend = false; //и снимаем флаг активности
break;
}
}
Response.Redirect("Summary.aspx"); //переходим на главную страницу
}
}
}
}
