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





Я решил заменить все экземпляры ViewData ["бла"] на ViewData.Eval ("бла"). Однако я хотел бы знать причину этого изменения, если это возможно, потому что:
Как вы устанавливаете данные просмотра? Это работает для меня:
Контроллер:
ViewData["CategoryName"] = a.Name;
Вид:
<%= ViewData["CategoryName"] %>
Кстати, я сейчас на предварительном просмотре 5. Но это сработало на 3 и 4 ...
Re: Рики
Я просто передаю объект, когда вызываю метод View () из контроллера.
Я также заметил, что на моем развернутом сервере, где ничего не обновлялось, ViewData.Eval не работает, а ViewData ["index"] работает.
На моем сервере разработки ViewData ["index"] не работает, а ViewData.Eval работает ...
Да, все, что вы передаете в представление, доступно в представлении как ViewData.Model. Но это будет просто старый добрый объект, если вы не используете строго типизированные представления ...
Мы внесли это изменение, потому что хотели немного симметрии с индексатором []. Метод Eval () использует отражение и просматривает модель для получения значений. Индексатор просматривает только элементы, непосредственно добавленные в словарь.
Да, я понял. Проблема заключалась в том, что ViewData ["бла"] перестала устанавливаться, и я хотел знать, почему (предполагаю, что MVC Preview 4 изменил это, но хотел подтвердить). Думаю, мне также было интересно, почему я не могу отменить изменения ссылки разработчика