编译器在Orchard主题中找不到html扩展方法

时间:2017-03-28 06:32:25

标签: c# asp.net-mvc razor orchardcms

我正在研究Orchard主题并创建了以下Html扩展方法:

using System;
using System.Web.Mvc;

namespace Themes.MyTheme {
    public static class HtmlExtensions {
        public static bool IsCurrent(
            this HtmlHelper html,
            string actionName,
            string controllerName) {

            string contextAction = (string) html.ViewContext.RouteData.Values["action"];
            string contextController = (string) html.ViewContext.RouteData.Values["controller"];

            bool isCurrent =
                string.Equals(contextAction, actionName, StringComparison.CurrentCultureIgnoreCase)
                && string.Equals(contextController, controllerName, StringComparison.CurrentCultureIgnoreCase);

            return isCurrent;
        }
    }
}

在Razor视图中,我添加了这个:

@using Themes.MyTheme

// More razor syntax

@if (!Html.IsCurrent("New", "Customer")) {
    Html.ActionLink(T("New Customer").ToString(), "New", new { Controller = "Customer", Area = "My.Area" }, new { })
}

我收到以下异常:

CS0246: The type or namespace name 'Themes' could not be found (are you missing a using directive or an assembly reference?)

This answer(以及其他人)让我相信我必须在我的Views文件夹中添加名称空间到web.config,我已经完成了。但我仍然得到这个错误。

扩展方法在与Razor视图相同的程序集中定义(标准Orchard解决方案中的Themes项目;我使用codegen创建了主题,并在那里添加了主题)。

如何让Razor / Orchard /编译器识别这个命名空间?

1 个答案:

答案 0 :(得分:1)

您需要将主题创建为自己的项目,而不仅仅是主题下的文件夹。没有自己的.csproj文件的主题不能在其中包含代码我很害怕。使用codegen创建主题时,有一个标志:

/CreateProject:true