MVC встроенные представления
Я пытаюсь встроить взгляды во внешние dll вместе с css и js для них. Я в основном там. Я делаю Html.RenderPartial из моего основного проекта, и это, кажется, не находит встроенного представления и css и js без проблем (используя VirtualPathProvider).
Однако этот встроенный вид затем вызывает действие (во внешней dll), которое возвращает PartialView (также встроенный). Представление найдено (и я поместил оператор @inherits System.Web.Mvc.WebViewPage вверху, чтобы избежать ошибок, связанных с "моделью, не найденной в контексте").
Однако последнее препятствие, по-видимому, является ошибкой, связанной с "... WebViewPage не содержит определения для DisplayFor"..... ", потому что я использую @Html.DisplayFor(.....
Может кто-нибудь сказать мне, что мне нужно сделать, чтобы этот последний кусочек головоломки сработал? Я скопировал файл web.config из папки Views в папку bin, где находятся мои dll (как, кажется, подразумевается в других сообщениях), но это не помогло.
Спасибо большое
PS Когда для действия сборки для представлений было задано Копировать в выходной каталог, и я использовал ViewEngine для указания на каталог bin/views, все это работало нормально. Только теперь я перешел на Embedded Ressource
1 ответ
@Html.DisplayFor(...) - это метод расширения со следующей подписью:
public static MvcHtmlString DisplayFor<TModel, TValue>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression,
string templateName
)
Он находится в System.Web.Mvc.Html (System.Web.Mvc.dll), на который нужно сослаться, чтобы представление правильно компилировалось. Как вы могли бы сослаться на это другой вопрос, но он может отображаться в других представлениях через VPP по умолчанию, или вы можете сделать следующее:
Если вы хотите убедиться, что он доступен, чтобы попытаться выяснить, почему он не загружен во время выполнения, вы можете предварительно скомпилировать свои представления. Просто добавьте следующее в ваш файл проекта:
<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'"> <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" /> </Target>
Это выявит любые ошибки, которые могут возникнуть в ваших представлениях при их компиляции, а не во время выполнения.
- Однако, если вы по-прежнему не можете ссылаться на сборку во время выполнения, вам может потребоваться добавить ее с помощью BuildManager.AddReferencedAssembly. Здесь я не собираюсь копировать / вставлять содержимое вышеуказанной ссылки, вы можете прочитать ее и прочитать дополнительную информацию. Осторожно, однако, ссылка на него с помощью помощника в другом представлении может быть более безопасным решением, поскольку, если на него уже есть ссылка, вышеуказанный метод замечает этот факт и сообщает об ошибке.