Является ли ViewBag и ViewData частью управления состоянием в asp.net mvc?

Может кто-нибудь сказать мне, пожалуйста, являются ли ViewData и ViewBag частью управления состоянием asp.net mvc или нет? Спасибо

3 ответа

Решение

ViewBag а также ViewData не сохраняют состояние, но могут передавать его представлениям, которые будут отображаться и храниться.

Что ViewBag а также ViewData?

ViewBag а также ViewData не являются механизмами сохранения состояния, но я считаю, что они являются частью управления состоянием: они представляют собой механизмы для передачи данных на страницу, которые затем могут быть сохранены как состояние в сгенерированном html. Таким образом, они являются частью жизненного цикла состояния, так как позволяют сохранять состояние в HTML-коде на стороне клиента с помощью таких помощников, как @Html.HiddenFor или же @Html.ActionLink,

В моем ответе на "сохранение значения js из 1 ActionResult для использования в другом ActionResult" я рассказываю о том, как ViewBag а также ViewData может использоваться для хранения состояния в клиентском html, и каковы различные варианты хранения состояний.

Что за что ViewBag это на самом деле dynamic способ доступа ViewData, так ViewBag.MyItem = "foo"; а также var valueEqualsFoo = ViewData["MyItem"]; установит и вернет ту же строку и может быть заменен.

На что они похожи?

ViewBag, ViewData наиболее тесно связаны с моделью представления в действии, где модель передается в представление внутри действия с использованием return View(viewModel);: все три метода передают состояние в памяти в html, где оно отправляется клиенту, на любые промежуточные кэши и "сохраняется" вне вашего сервера.

Аналогичным образом, когда строка запроса в URL-адресе отправляется на сервер в запросе http, это метод передачи состояния, фактическим хранилищем состояний является <a href="urlwithquerystring">...</a> якорь в HTML. Restful URL и тела для запросов POST ajax одинаковы по своему определению и поведению. ViewBag/Data передать состояние из Action в html, который передается клиенту и сохраняется, строку запроса или URL-адрес restful, а затем передать состояние обратно на сервер для использования в следующем вызове Action.

Когда я должен их использовать?

Трудно проверить наличие динамических свойств с ошибкой в ​​коде Razor; легко проверить, существует ли свойство в строго типизированной модели представления. Поэтому я считаю, что вы должны использовать их очень редко. На мой взгляд, предпочтительнее создавать строго типизированные модели представления, чем использовать ViewBag или же ViewData, Они могут быть хорошими для быстрого и грязного решения, но эти вещи, как правило, создают технический долг. ViewBag возможно подходит для установки заголовка страницы.

Сильно типизированные модели просмотра:

  • упростить использование сопоставления с такими фреймворками, как http://automapper.org/;
  • сделать взгляды более тестируемыми; а также
  • упростить создание разных представлений для разных устройств, когда вы передаете одну и ту же модель каждому представлению

Каковы мои варианты для государственного хранения?

Я сказал это здесь, и я скажу это снова: раньше было по крайней мере Девять вариантов для управления постоянным состоянием пользователя в ASP.NET, и многие из них все еще применяются в MVC. Все они имеют различное использование в зависимости от того, как должно использоваться состояние. Как правило, код на стороне сервера, который по возможности не содержит состояний, легче тестировать и отлаживать.

  • Хранение на стороне клиента включает в себя:
    • Объекты передаются обратно в результате html и превращаются в:
      • Поля ввода
      • Скрытые поля
      • Переменные Javascript для использования в телах POST запроса ajax
      • Строковые значения запроса и пути в URL (например, Restful URLs, например /Product/1)
    • Старые методы ASP.NET, которые сохраняют состояние в скрытых полях HTML, таких как ViewState
    • Печенье
    • Методы HTML5, такие как локальное хранилище
    • Анти-подделка токенов генерируется для предотвращения XSRF
  • Серверное хранилище (напрямую связано с ASP.NET и ASP.NET MVC):
    • Сессия (доступна через контроллер Session имущество
    • Кэш (доступен через контроллер Cache имущество)
    • TempData
    • HttpContext ["ключ элемента"]
    • Приложение (доступно через контроллер HttpContext собственность как HttpContext.Application)
    • Файлы Web.config и Machine.config (да, они также содержат состояние, оно только для всего приложения) и, следовательно, WebConfigurationManager.AppSettings толковый словарь.
  • Серверное хранилище (другое):
    • Базы данных, будь то SQL или NOSQL
    • Файловое хранилище
    • Очереди сообщений, такие как WASB

Примечания:

Теперь у нас есть простые в использовании инструменты для адаптивного дизайна, которые мы можем использовать, когда это уместно, но это не всегда подходит: некоторые виды должны выглядеть совершенно иначе на мобильных устройствах, но при этом использовать ту же модель представления, что и на сайте с большим экраном.

Оба не являются!

Управление состоянием имеет 2 типа 1: сторона клиента, 2: сторона сервера

Сторона клиента

  • Скрытое поле
  • Просмотр состояния
  • Печенье
  • Control State -Query Strings

Серверная сторона

  • сессия
  • заявка

Если вы хотите, чтобы разница для них, пожалуйста, посмотрите здесь В чем разница между ViewData и ViewBag?

и что такое ViewData, ViewBag

В View Data, View Bag и Temp data мы будем переносить данные с контроллеров для просмотра, поэтому они являются частью управления состоянием в MVC. Средство управления состоянием сохраняет состояние контроллеров и веб-страницы, а также объектов и данных.

Это может быть сделано следующими способами: Управление состоянием на стороне клиента Управление состоянием на стороне сервера.

Вкратце, чтобы узнать https://www.codeproject.com/Articles/492397/State-Management-in-ASP-NET-Introduction.

Другие вопросы по тегам