我已经开始使用MvcContrib的可移植区域,一切都适用于非常简单的视图,但是当我想在我的视图中使用自定义模型时,我得到错误,说明命名空间不存在。
视图设置为嵌入为资源。视图中的intellisense可以很好地识别模型。
有人知道可能导致问题的原因吗?
的更新 的
我认为这可能与我正在使用MEF加载插件的事实有关。加载控制器时遇到了类似的问题。我必须构建一个自定义的ControllerFactory,如果默认的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
答案 0 :(得分:1)
我面临与MEF&amp; amp;剃刀视图引擎(尝试类似的方法)。当我加载我的强类型剃刀视图时,我得到“你错过了一个程序集/引用”错误。
我尝试在Bin下部署我的程序集,但这也没有帮助。
唯一可以避免的方法是在RazorBuildProvider上执行loadFrom程序集。
我在RazorBuildProvider上找不到任何文档,除了“不打算直接从您的代码中使用”
你的代码片段非常有趣......你能解释它是如何工作的吗?这预计会在哪里注册 - 在AppStart?
RazorBuildProvider.CodeGenerationStarted += (object sender, EventArgs e) =>
{
RazorBuildProvider provider = (RazorBuildProvider)sender;
foreach (var module in ExternalComponents)
{
provider.AssemblyBuilder.AddAssemblyReference(module.GetType().Assembly);
}
};
任何清晰度都会非常感激......
答案 1 :(得分:0)
我最终决定将所有插件放在Bin目录中,而不是自定义插件目录。这不是我的目标解决方案,但它现在有效。