Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архитетура ИС Клюев.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
461 Кб
Скачать
☆

Описание структуры приложения

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> &nbsp <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"); //переходим на главную страницу

}

}

}

}