2012-06-12 2 views
4

Как и для this question Я использую пользовательский VirtualPathProvider для получения представлений, встроенных в DLL. Если я не ставлю @inherits System.Web.Mvc.WebViewPage на мой взгляд, я получаю эту ошибку:Использование пользовательского VirtualPathProvider для загрузки встроенных представлений, которые наследуют пользовательский WebViewPage

The view at '~/Views/Home/Index.cshtml' must derive from ViewPage, ViewPage<TModel>, ViewUserControl, or ViewUserControl<TModel>. 

Я использую пользовательский BaseViewPage, который наследуется от WebViewPage. Прежде чем я начал использовать этот пользовательский VirtualPathProvider, работала новая базовая страница в web.config. Теперь, если я попытаюсь наследовать свой пользовательский класс на странице с @inherits My.BaseViewPage, я получаю ту же ошибку, что и выше.

Для полноты я добавлю, что страница начинает компилироваться, если я наследую WebViewPage, но она выдает ошибку, потому что есть код, ожидающий, что представление имеет свойства из BaseViewPage.

ответ

2

Оказалось, что проблема связана с механизмом просмотра, который я использовал. Чтобы заставить VirtualPathProvider работать, я заменил механизм просмотра на пользовательский, который добавил места просмотра, в которых я нуждался. Я случайно унаследовал от WebFormsViewEngine вместо RazorViewEngine, поэтому ошибка, которую я продолжал получать, была для ViewPage вместо WebViewPage. Теперь, когда все это выяснено, моя страница с базовым представлением работает очень хорошо.

+0

ах - так рад, что нашел этот ответ! :) – Karan

1

Хммм ... это возможно, что базовый класс не может правильно решить из вашей DLL?

Если это так, то вам нужно добавить пользовательский обработчик/тип обработчика разрешения ... (из памяти) AppDomain.AssemblyResolve - в этом обработчике вы захотите захватить соответствующий тип из вашей DLL и вернуть это обратно.

Чисто догадаться, к сожалению - на моем телефоне, поэтому возможности исследования ограничены.

+0

Спасибо, что ответили. Я почти спустился по этому маршруту, но [решение] (http://stackoverflow.com/a/11057293/216553) оказалось простым экземпляром PEBKAC. – ashanan