无法在局部视图中使用扩展方法

Posted

技术标签:

【中文标题】无法在局部视图中使用扩展方法【英文标题】:Unable to use extension method within partial view 【发布时间】:2012-07-17 14:23:18 【问题描述】:

我正在尝试在局部视图中使用字符串扩展方法。我收到以下错误:

“字符串”不包含“TruncateAtCharacter”的定义

扩展方法如下:

namespace PCCMS.Core.Libraries 
    public static class Extensions 
        public static string TruncateAtCharacter(this string input, int length) 
            if (String.IsNullOrEmpty(input) || input.Length < length)
                return input;

            return string.Format("0...", input.Substring(0, length).Trim());
        
    

根据this previous question,我需要将命名空间添加到 web.config,但是我已经这样做了,我仍然收到相同的错误消息。但奇怪的是,我确实获得了扩展方法的智能感知?

<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="PCCMS.Core.Libraries.ClientWebViewPage">
        <namespaces>
            <add namespace="System.Web.Mvc" />
            <!-- Other namespaces... -->
            <add namespace="PCCMS.Core.Libraries" />
        </namespaces>
    </pages>
</system.web.webPages.razor>

谁能解释这是为什么?

谢谢

【问题讨论】:

【参考方案1】:

如果命名空间声明位于根视图目录 web.config 的 system.web.webPages.razor/namespaces 元素中,这应该可以工作。如果失败,请尝试在视图顶部使用显式 @using 语句,而不使用任何 web.config 语句。它“应该”起作用。

PS 是 ReSharper 智能感知还是 VS? ReSharper 明确告诉我,如果 web.config 条目不在范围内,则需要 @using。

【讨论】:

对不起,我应该提到我尝试在部分中添加@using,但没有奏效。既没有将命名空间声明添加到区域内的 web.config 中,也没有添加到项目根目录中。 我刚刚复制了您的代码,只有在视图中使用@using 语句时它才有效。仅在任一配置中引用命名空间都不会做任何事情。 好的。我只是使用 Views 目录中的 web.config 并且在 View 本身中没有 @using 语句才让它工作。我正在使用 system.web.webPages.razor/namespaces 元素。我的根配置中没有该元素,当我将该语句添加到默认的 system.web.pages 时,它也混淆了解析器。试着把它放在 Views web.config 中。 @RoryMcCrossan,当您说 项目根目录 时,您是指~/web.config 还是~/Views/web.config?因为如果使用 Razor 视图引擎,则必须在 ~/Views/web.config 中声明命名空间。【参考方案2】:

错误是在 VS 调试器中运行时发生的,还是从测试或生产系统中运行时发生的?确保包含扩展的模块已正确安装(并正确更新)。另外,请尝试从命令提示符运行“iisreset”。

【讨论】:

以上是关于无法在局部视图中使用扩展方法的主要内容,如果未能解决你的问题,请参考以下文章

MVC2 扩展方法在我的视图中引发错误

为啥在 MVC4 Razor 视图中找不到扩展方法?

Django视图扩展类

如何在扩展 LifecycleActivity 的视图中设置SupportActionBar

如何调用(调用)可扩展列表视图的 onChildClick 方法?

添加多个子视图的最佳方法 UIViewControllers