ASP.NET MVC 3 - Portable Area View не находит мою модель
Я начал использовать Переносимые Области MvcContrib, и все отлично работает для очень простых представлений, но когда я хочу использовать пользовательскую модель в своем представлении, я получаю сообщение об ошибке, говоря, что пространство имен не существует.
Представление установлено для встраивания в качестве ресурса. И intellisense в представлении распознает модель просто отлично.
Кто-нибудь знает, что может вызвать проблемы?
ОБНОВИТЬ
Я думаю, что это может быть связано с тем, что я использую MEF для загрузки плагинов. У меня была похожая проблема при загрузке контроллеров. Мне нужно было создать собственную ControllerFactory, которая бы выглядела в списке контроллеров MEF, если завод по умолчанию не нашел подходящего контроллера.
ОБНОВЛЕНИЕ 2
Мне удалось избавиться от ошибки, предоставив RazorBuildProvider мои MEF-загруженные сборки. Однако сейчас вид уже не найден. Если представление не является строго типизированным, оно найдено.
RazorBuildProvider.CodeGenerationStarted += (object sender, EventArgs e) =>
{
RazorBuildProvider provider = (RazorBuildProvider)sender;
foreach (var module in ExternalComponents)
{
provider.AssemblyBuilder.AddAssemblyReference(module.GetType().Assembly);
}
};
Исходный код
Модель
namespace Isis.Plugins.TextArea.TextArea.Models
{
public class TextAreaModel
{
[Required(ErrorMessage = "Field is required")]
public string Message { get; set; }
}
}
Контроллер:
namespace Isis.Plugins.TextArea.TextArea.Controllers
{
[Export(typeof(IController))]
public class IndexController : Controller
{
[HttpGet]
public ActionResult Index()
{
return View(new TextAreaModel() { Message = "Hallow!" });
}
[HttpGet]
public ActionResult Editor()
{
return View(new TextAreaModel() { Message = "EDITOR CONTENT" });
}
}
}
Вид
@model Isis.Plugins.TextArea.TextArea.Models.TextAreaModel
@Model.Message
Ошибка:
Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.
Compiler Error Message: CS0234: The type or namespace name 'Plugins' does not exist in the namespace 'Isis' (are you missing an assembly reference?)
Source Error:
Line 27:
Line 28:
Line 29: public class _Page_Areas_TextArea_Views_Index_Index_cshtml : System.Web.Mvc.WebViewPage<Isis.Plugins.TextArea.TextArea.Models.TextAreaModel> {
Line 30:
Line 31: #line hidden
2 ответа
В конце концов я решил поместить все плагины в каталог Bin вместо пользовательского каталога плагинов. Это не то решение, к которому я стремился, но пока оно работает.
Я сталкиваюсь с подобной проблемой с MEF & razor view engine (пробуя аналогичный подход, который вы описали). Когда я загружаю свои строго типизированные виды бритвы, я получаю сообщение об ошибке "Вы пропустили сборку / ссылку".
Я пытался развернуть свои сборки под Bin, но это тоже не помогло.
Единственный способ избежать этого - выполнить сборку loadFrom на RazorBuildProvider.
Я не смог найти никакой документации на RazorBuildProvider, кроме "не предназначенной для использования непосредственно из вашего кода"
Ваш фрагмент кода довольно интересный... не могли бы вы объяснить, как он работает? Где это должно быть зарегистрировано - на AppStart?
RazorBuildProvider.CodeGenerationStarted += (object sender, EventArgs e) =>
{
RazorBuildProvider provider = (RazorBuildProvider)sender;
foreach (var module in ExternalComponents)
{
provider.AssemblyBuilder.AddAssemblyReference(module.GetType().Assembly);
}
};
Любая ясность будет высоко ценится...