【问题标题】:ASP.NET MVC 3 - Portable Area View doesn't find my modelASP.NET MVC 3 - 便携式区域视图找不到我的模型
【发布时间】:2011-08-03 08:22:43
【问题描述】:

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

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

有人知道什么可能导致问题吗?

更新

我认为这可能与我使用 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

【问题讨论】:

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


    【解决方案1】:

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

    我尝试在 Bin 下部署我的程序集,但这也没有帮助。

    避免它的唯一方法是在 RazorBuildProvider 上执行 loadFrom 程序集。

    除了“不打算直接从您的代码中使用”之外,我找不到任何关于 RazorBuildProvider 的文档

    你的代码 sn-p 很有趣……你能解释一下它是如何工作的吗?预计将在哪里注册 - 在 AppStart?

        RazorBuildProvider.CodeGenerationStarted += (object sender, EventArgs e) =>
    {
        RazorBuildProvider provider = (RazorBuildProvider)sender;
        foreach (var module in ExternalComponents)
        {
            provider.AssemblyBuilder.AddAssemblyReference(module.GetType().Assembly);
        }
    };
    

    任何澄清将不胜感激......

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多