ASP.NET MVC ViewData (с использованием индексов)

У меня было рабочее решение с использованием ASP.NET MVC Preview 3 (было обновлено с решения Preview 2), которое использует нетипизированный ViewMasterPage следующим образом:

public partial class Home : ViewMasterPage

В Home.Master есть такой оператор отображения:

<%= ((GenericViewData)ViewData["Generic"]).Skin %>

Однако один из разработчиков в команде только что изменил ссылки на сборку на Preview 4.

После этого код больше не будет заполнять ViewData индексированными значениями, подобными приведенным выше.

Вместо этого ViewData ["Generic"] имеет значение null.

Согласно этот вопрос, ViewData.Eval ("Generic") работает, и ViewData.Model также заполняется правильно.

Однако причина, по которой это решение не использует типизированные страницы и т. д., Заключается в том, что это своего рода устаревшее решение. Таким образом, нецелесообразно проходить через это довольно большое решение и обновлять все страницы .aspx (тем более, что компилятор не обнаруживает такого рода вещи).

Я попытался вернуть сборки, удалив ссылку, а затем добавив ссылку на сборку Preview 3 в папку bin проекта. Это ничего не изменило. Я даже попытался вернуть файл проекта к более ранней версии, но это, похоже, не решило проблему.

У меня есть другие решения, использующие ту же технику, которые продолжают работать.

Есть ли что-нибудь, что вы можете предложить относительно того, почему это внезапно перестало работать, и как я могу это исправить (любой намек в правильном направлении будет оценен по достоинству)?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
1 488
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Я решил заменить все экземпляры ViewData ["бла"] на ViewData.Eval ("бла"). Однако я хотел бы знать причину этого изменения, если это возможно, потому что:

  1. Если это случится с другими моими проектами, было бы неплохо исправить это.
  2. Было бы неплохо оставить развернутый рабочий код и не перезаписывать этими изменениями.
  3. Было бы неплохо узнать, что больше ничего не изменилось, чего я не заметил.

Как вы устанавливаете данные просмотра? Это работает для меня:

Контроллер:

ViewData["CategoryName"] = a.Name;

Вид:

<%= ViewData["CategoryName"] %>

Кстати, я сейчас на предварительном просмотре 5. Но это сработало на 3 и 4 ...

Re: Рики

Я просто передаю объект, когда вызываю метод View () из контроллера.

Я также заметил, что на моем развернутом сервере, где ничего не обновлялось, ViewData.Eval не работает, а ViewData ["index"] работает.

На моем сервере разработки ViewData ["index"] не работает, а ViewData.Eval работает ...

Да, все, что вы передаете в представление, доступно в представлении как ViewData.Model. Но это будет просто старый добрый объект, если вы не используете строго типизированные представления ...

Да, я понял. Проблема заключалась в том, что ViewData ["бла"] перестала устанавливаться, и я хотел знать, почему (предполагаю, что MVC Preview 4 изменил это, но хотел подтвердить). Думаю, мне также было интересно, почему я не могу отменить изменения ссылки разработчика

Matt Mitchell 16.09.2008 03:28
Ответ принят как подходящий

Мы внесли это изменение, потому что хотели немного симметрии с индексатором []. Метод Eval () использует отражение и просматривает модель для получения значений. Индексатор просматривает только элементы, непосредственно добавленные в словарь.

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