1

我已经开始使用 MvcContrib 的 Portable Areas 并且对于非常简单的视图一切正常,但是当我想在我的视图中使用自定义模型时,我收到错误说命名空间不存在。

视图设置为作为资源嵌入。视图中的智能感知可以很好地识别模型。

有谁知道可能导致问题的原因?

更新

我认为这可能与我使用 MEF 加载插件的事实有关。加载控制器时我遇到了类似的问题。如果默认控制器工厂没有找到合适的控制器,我必须构建一个自定义控制器工厂,该控制器工厂将在 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
4

2 回答 2

1

我在使用 MEF 和剃刀视图引擎时遇到了类似的问题(尝试您描述的类似方法)。当我加载我的强类型剃须刀视图时,我得到“你是否缺少程序集/引用”错误。

我尝试在 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);
    }
};

任何清晰度将不胜感激......

于 2011-12-09T17:22:30.927 回答
0

我最终决定将所有插件放在 Bin 目录中,而不是自定义的 Plugins 目录中。这不是我想要的解决方案,但它现在有效。

于 2011-08-03T19:57:50.197 回答