Передача анонимных объектов из вида в частичный вид - программирование
Подтвердить что ты не робот

Передача анонимных объектов из вида в частичный вид

Я понимаю из различных других связанных с нами вопросов здесь и здесь, среди прочего, что вы не можете пройти анонимно набранные объекты из контроллера в представление, поскольку анонимные типы определяются с помощью внутреннего аксессора. Код View и Controller скомпилированы в разные сборки, поэтому попытка его использования приводит к этой ошибке...

Объект

не содержит определения для 'foo'

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

Однако я думал, что вы все равно сможете передать анонимный тип из представления в частичный вид, потому что, будучи представлениями, они будут скомпилированы в одной сборке.

Razor Просмотреть код...

@Html.Partial("Partial1", new { foo = "Something", bar = "Something else" })

и код частичного просмотра для "Partial1"

@model dynamic 

<h1>@Model.foo</h1>
<span>@Model.bar</span>

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

Это как если бы я достиг порога, где вид и частичный вид больше не компилируются в одну и ту же сборку. Но я просто догадываюсь.

Интересно, может ли кто-нибудь пролить свет на это.

4b9b3361

Ответ 1

Подробнее см. в вопросе и моем ответе здесь:

Динамическая модель MVC Razor, 'object' не содержит определения для 'PropertyName'

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

Исправить нарушающий вид с разбитым типом модели, очистить и перестроить решение, и оно должно работать снова.

Ответ 2

Не знаю, почему он прекратил работать, но вот обходной путь.

Используйте @ViewData.Eval("foo") вместо @Model.foo

и удалите динамическую строку @model. Это не нужно.

Ответ 3

Я никогда не мог объяснить, почему это работает, а затем остановилось, поэтому просто пришлось прибегать к использованию именных определений типов. Не конец света, а разочарование. Этот вид идеально подходит для использования динамических типов.