2008-09-15 2 views
1

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

public partial class Home : ViewMasterPage 

На главную .master есть дисплей заявление так:

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

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

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

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

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

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

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

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

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

ответ

1

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

+0

Хорошо, спасибо за clairfying. – 2008-09-21 15:28:30

0

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

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

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

Контроллер:

ViewData["CategoryName"] = a.Name; 

Вид:

<%= ViewData["CategoryName"] %> 

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

0

Re: Рикки

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

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

На моем сервере разработки ViewData [ «индекс»] терпит неудачу и ViewData.Eval работает ...

0

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

+0

Да, я понимаю. Проблема заключалась в том, что ViewData ["blah"] перестала получать набор, и я хотел знать, почему (предполагая, что MVC Preview 4 изменил это, но хотел подтвердить). Наверное, мне также было интересно, почему я не мог отменить изменения ссылки разработчика – 2008-09-15 23:28:48

Смежные вопросы