ASP.NET MVC ViewData (с использованием индексов) - PullRequest
1 голос
/ 15 сентября 2008

У меня было рабочее решение, использующее 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» проекта. Это ничего не изменило. Я даже пытался вернуть файл Project в более раннюю версию, но это все еще не решало проблему.

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

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

Ответы [ 5 ]

1 голос
/ 18 сентября 2008

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

0 голосов
/ 15 сентября 2008

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

0 голосов
/ 15 сентября 2008

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

Контроллер:

ViewData["CategoryName"] = a.Name;

Вид:

<%= ViewData["CategoryName"] %>

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

0 голосов
/ 15 сентября 2008

Re: Рикки

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

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

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

0 голосов
/ 15 сентября 2008

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

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