Просто глядя на него, я думаю, что следующая строка является проблемой:
<ViewData Model="Region" />
Вместо этого следует читать:
<viewata model="Region" />
Обратите внимание на нижнем регистр «модель». Это связано с тем, что model
- это особый случай, поскольку за кулисами он выполняет бросок на строго типизированную модель. Верхний будет определять переменную с именем Model
в сгенерированном классе вида и присвоить ей значение Region
. Используя нижеследующий вариант ниже, на самом деле создайте переменную Model
, но также добавьте ее к строго типизированному экземпляру Region
, который исходит из словаря ViewData
.
Примечание При использовании Model
в коде, хотя, как вы делали в цикле for each
, она должна быть в верхнем регистре, который является правильным в вашем случае. Еще раз, это единственный частный случай, потому что он тянет строго типизированную модель из словаря ViewData
.
Еще одна вещь - <viewata model="Region" />
должна быть объявлена в родительском представлении и может быть определена только один раз на странице, поэтому вы не можете переопределить ее в частичном представлении. Если это частичное представление, вы должны использовать его, передав часть модели, как это было сделано во втором примере выше.
Причина для исключения выше, потому что он пытается получить Id
собственности в качестве статического элемента от Region
Типа, а не запрашивая Id
собственности на ваш например из Region
как часть вашего ViewModel.
В качестве примечания стороны, код, чтобы добраться, где вы хотите, немного искалечен. Вы можете найти более аккуратные способы сделать то, что хотите, проверив некоторые из Direct Usage Samples, но я понимаю, что это, вероятно, просто всплеск, чтобы увидеть, как он работает ...:)
Update в ответ на ваш follow up question/answer
Я совершенно уверен, что проблема с принятием Region
в следующий вызов:
... снова вниз именование. Да, вы можете иметь только один model
за просмотр, как я уже говорил, так что вам нужно сделать, это удалить следующие из верхней части вашей парциальное:
<viewdata model="Region" />
Это то, что вызывает проблему. Я бы переименовать пункт вдаваясь в ваш частичный так:
<ActiveTranslationRegion ActiveRegion="region" if="region.Active==true">
и тогда ваш парциальное будет выглядеть следующим образом:
<form action="/Translation/DeactivateRegion" class="ui-widget-content active-translation-region-widget">
<input type="hidden" name="Id" value="${ActiveRegion.Id}" />
<label class="region-name">${ ActiveRegion.RegionName }</label>
<input class="deactivate-region-button" type="image" src=${Url.Content("~/Content/Images/Deactivate.png")} alt="Deactivate" />
</form>
Примечание Я использую ActiveRegion
, потому что в Спарк анализаторе ActiveRegion
получает объявленную переменную и присваивает значение region
в текущей области действия при прохождении через for loop
. Не нужно придерживаться религиозно до model
- потому что вы ушли и прошли в куске model
теперь, когда вы объявили как ActiveRegion
. О, и вы можете придерживаться имени Region
, если вы действительно этого хотите, я просто изменил его, чтобы сделать точку, и потому что у вас есть Type
под названием Region
в вашем коде, и я не большой поклонник причудливых проблем, используя одно и то же имя для переменной, как тип может привести. Плюс это делает его немного яснее.
Недостаток вызова метода Html.RenderPartial не сразу очевиден. Одна вещь, которую вы теряете, - это рендеринг с тремя проходами, который предлагает Spark. Если вы используете синтаксис тега (что предпочтительнее), вы сможете укладывать частичные части в частичных до нескольких уровней вниз, передавая переменные, которые кормят каждую частичную, что им нужно, по стеку. Он получает действительно мощный - начните анализировать структуры сетки данных, где строки и ячейки являются отдельными частицами, которые получают переменные, которые им нужны из модели, все они красивы и чисты в отдельных управляемых файлах просмотра. Не останавливайтесь на этом, начинайте думать о таргетинге на базу содержимого заголовка и нижнего колонтитула на переменные или три макета столбцов, которые создают панель мониторинга, которая делает все виды на индивидуально уложенных частицах на многие уровни глубокими.
Вы теряете всю эту гибкость при использовании стандартного метода ASP.NET MVC Helper для болота Html.RenderPartial()
. Будьте осторожны, это более чем вероятно решение, подобное выше.
Позвольте мне знать, если это работает ...
Все лучшее
Rob G
Роберт, спасибо за Ваш ответ. Вы правильно относились к случаю ключевого слова модели в частичном представлении. В конце концов, с помощью коллеги, у которого больше опыта с Spark, чем у меня, я довольно много рефакторинг кода. Дополнительную информацию см. В моем ответе ниже. – 2010-12-01 09:36:04
Спасибо за обновление, я обновил свой ответ в ответ на ваше обновление. – 2010-12-03 10:03:33