2012-07-17 53 views
6

我想在局部視圖中使用字符串擴展方法。我得到以下錯誤:無法在局部視圖中使用擴展方法

'string' does not contain a definition for '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 /命名空間元素這應該工作。如果失敗,請嘗試在View的頂部使用顯式@using語句,而不使用任何web.config語句。它'應該'工作。

PS是ReSharper intellisense還是VS? ReSharper明確告訴我,如果web.config條目不在範圍內,則需要@using。

+0

對不起,我應該提到我嘗試在部分中添加@using,並且沒有奏效。也沒有將該名稱空間聲明添加到該區域內的web.config中,也沒有將該名稱空間聲明添加到項目根目錄中的web.config。 – 2012-07-17 14:54:18

+0

我剛剛複製你的代碼,它只有在視圖中使用@using語句時才起作用。只要在任一配置中引用命名空間都不會執行任何操作。 – 2012-07-17 14:57:48

+0

好的。我只是在View目錄中使用web.config,並且在View本身沒有使用@using語句。我正在使用system.web.webPages.razor/namespaces元素。我的root配置文件中沒有這個元素,當我將語句添加到默認的system.web.pages中時,它也使分析器感到困惑。試試把它放在Views web.config中。 – 2012-07-17 15:01:27

0

在VS調試器中運行,或者從測試或生產系統運行時發生錯誤?確保包含擴展的模塊已正確安裝(並已正確更新)。另外,請嘗試從命令提示符處運行「iisreset」。