MVC扩展无法识别

时间:2015-04-18 13:33:41

标签: asp.net-mvc visual-studio-2013 asp.net-mvc-5 extension-methods asp.net-mvc-views

我正在构建一个侧面菜单页面以下代码

<nav class="navbar-default navbar-static-side" role="navigation">
    <div class="sidebar-collapse">
        <ul class="nav" id="side-menu">
            @if ( User.IsInRole( Constants.ROLE_ADMIN ) ) {
                <li class="@Html.IsSelected(controller: "UserGroup")">
                    <a href="@Url.Action("Index", "UserGroup")"><i class="fa fa-user"></i> <span class="nav-label">Users and Roles</span> <span class="fa arrow"></span></a>
                    <ul class="nav nav-second-level">
                        <li class="@Html.IsSelected(action: "Index")"><a href="@Url.Action("Index", "UserGroup")">Users</a></li>
                        <li class="@Html.IsSelected(action: "CreateUser")"><a href="@Url.Action("CreateUser", "UserGroup")">Create user</a></li>
                    </ul>
                </li>
            }
        </ul>
    </div>
</nav>

Html.IsSelected扩展方法只需通过查看控制器和/或操作将css类添加到要设置为选中的项目

namespace MyWebApp.Helpers
{
    public static class BootstrapExtensions
    {
        public static string IsSelected( this HtmlHelper html, string controller = null, string action = null ) {
            string cssClass = "active";
            string currentAction = (string)html.ViewContext.RouteData.Values["action"];
            string currentController = (string)html.ViewContext.RouteData.Values["controller"];

            if ( String.IsNullOrEmpty( controller ) )
                controller = currentController;

            if ( String.IsNullOrEmpty( action ) )
                action = currentAction;

            return controller == currentController && action == currentAction ?
                cssClass : String.Empty;
        }
    }
}

除了Visual Studio在开发过程中仍然将扩展方法标记为无法识别的事实外,这非常有用。如果我构建项目everythings工作,但然后,在构建完成VS签署代码后,无法识别。

enter image description here

我在视图顶部添加了一个using,并在根视图web.config文件中添加了命名空间

<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
        <namespaces>
            <add namespace="System.Web.Mvc" />
            <add namespace="System.Web.Mvc.Ajax" />
            <add namespace="System.Web.Mvc.Html" />
            <add namespace="System.Web.Routing" />
            <add namespace="MyWebApp" />
            <add namespace="MyWebApp.Resources" />
            <!-- extensions namespace -->
            <add namespace="MyWebApp.Helpers" />
        </namespaces>
    </pages>
</system.web.webPages.razor>

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果问题是命名空间,请尝试捎带到另一个使用的命名空间,例如System

namespace System
{
    public static class BootstrapExtensions
    {

还尝试在调试模式下运行项目,我的一些项目在发布模式下运行时遇到新代码时出现问题