Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов. За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее. ✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать». Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами! Сохранение объектов в состоянии вида
Как уже говорилось, состояние вида позволяет хранить, кроме простых типов, также и объекты. Для того чтобы элемент мог быть сохранен в состояние вида, он должен быть сперва преобразован в последовательность байтов. Такой процесс называется сериализацией. При создании нового класса по умолчанию его объекты не поддаются сериализации. При попытке поместить их в состояние вида появляется сообщение об ошибке. Для того чтобы создать объект, поддающийся сериализации, необходимо перед объявлением класса данного объекта разместить атрибут Serializable. Пример создания и сохранения класса в состоянии вида приведен ниже. Здесь создается класс User, который может быть подвергнут сериализации, и создается объект этого класса, который затем сохраняется в состояние вида. Полный исходный текст приложения приведен ниже. public partial class _Default: System.Web.UI.Page{ [Serializable] public class User { public string FirstName; public string LastName; public User(string firstName, string lastName) { FirstName = firstName; LastName = lastName; } } protected void Button1_Click(object sender, EventArgs e) { lbl_Result.Text = " Здравствуйте, " +tb_FirstName.Text+" " + tb_LastName.Text+"! Добро пожаловать в приложение ASP.NET"; lbl_Result.ForeColor = Color.Red; //Сохраняем объект в ViewState User user = new User(tb_FirstName.Text, tb_LastName.Text); ViewState[" CurrentUser" ] = user; tb_FirstName.Text = " "; tb_LastName.Text = " "; } protected void btn_RestoreTextBox_Click(object sender, EventArgs e) { //Восстанавливаем значение объекта User User user; if (ViewState[" CurrentUser" ]! = null) { user = (User)ViewState[" CurrentUser" ]; tb_LastName.Text = user.LastName; tb_FirstName.Text = user.FirstName; } } protected void Page_Load(object sender, EventArgs e) { }}Использование состояния вида является хорошим вариантом сохранения значений переменных и полей форм между вызовами, т. к. не предполагает задействование ресурсов памяти сервера. Тем не менее существуют несколько отрицательных сторон применения ViewState. 1. Данные ViewState сохраняются в скрытых полях страницы и передаются на сторону клиента. В этом можно убедиться, просмотрев исходный код такой страницы. Конечно, эти данные не хранятся в открытом виде, они представлены в формате Base64, однако их легко можно преобразовать в массив байт, представляющих символы ASCII. Для этого достаточно использовать функцию FromBase64String как показано в следующем примере: Byte[] stringBytes=Convert.FromBase64String(ViewStateString); String decodedString=System.Text.Encoding.ASCII.GetString(stringBytes);В результате этих действий в строке decodedString будет содержаться строка, полученная в результате преобразования Base64 строки в набор символов ASCII, которые могут быть выведены на экран и легко прочитаны. Все это заставляет сделать два важных вывода. Во-первых, количество информации, сохраняемой в состояние вида, не должно быть большим, т. к. это приводит к увеличению объема передаваемых данных от сервера к клиенту и наоборот. В случае необходимости сохранения большого количества данных лучше воспользоваться средствами базы данных либо использовать состояние сеанса. Во-вторых, в ViewState нельзя сохранять критичные данные (данные, доступ пользователя к которым необходимо запретить), т. к. они легко могут быть декодированы и прочитаны, более того, опытный пользователь сможет изменить эти данные при осуществлении запроса на обратную отсылку. В этом случае лучше воспользоваться состоянием сеанса. 2. ViewState не позволяет сохранять информацию, которая будет использоваться несколькими страницами. В этом случае лучше воспользоваться состоянием сеанса, наборами cookie либо строкой запроса.
|