ASP.NET MVC 3 - 便携式区域视图找不到我的模型

时间:2011-08-03 08:22:43

标签: asp.net-mvc asp.net-mvc-3 mvccontrib portable-areas

我已经开始使用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

2 个答案:

答案 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目录中,而不是自定义插件目录。这不是我的目标解决方案,但它现在有效。