无法在局部视图中使用扩展方法
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”。
【讨论】:
以上是关于无法在局部视图中使用扩展方法的主要内容,如果未能解决你的问题,请参考以下文章
如何在扩展 LifecycleActivity 的视图中设置SupportActionBar