2012-07-17 26 views
6

部分ビューで文字列拡張メソッドを使用しようとしています。私は次のエラーを取得する:ここで部分ビュー内で拡張メソッドを使用できません

'string' does not contain a definition for 'TruncateAtCharacter'

は、拡張メソッドです:this previous questionによると

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()); 
     } 
    } 
} 

私はしかし、私はこれを行っていると私はまだ受け、web.configファイルに名前空間を追加する必要があります同じエラーメッセージ。しかし、私は拡張メソッドのためにintellisense得るのですが、何が奇妙ですか?

<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 /名前空間の要素である場合、これは動作するはずです。それが失敗した場合は、web.configステートメントを使わずに、ビューの先頭に明示的な@usingステートメントを使用してみてください。それはうまくいくはずです。

PS ReSharper intellisenseまたはVSですか? ReSharperは、web.configエントリがスコープ内にない場合、@使用が必要であることを明示しています。

+0

申し訳ありませんが、私は部分的に@usingを追加しようとしましたが、動作しませんでした。名前空間宣言を領域内のweb.configにもプロジェクトルート内にも追加していません。 –

+0

私はあなたのコードをコピーしました。これは、ビューで@using文を使用する場合にのみ機能します。どちらの設定でも名前空間を参照するだけで何もできません。 –

+0

私は、Viewディレクトリのweb.configとView自体に@using文を使用しないで動作させました。私はsystem.web.webPages.razor/namespaces要素を使用しています。私は自分のルート設定でその要素を持っていなかったし、デフォルトのsystem.web.pagesにも文を追加したときにパーサを混乱させた。 Views web.configに入れてみてください。 –

0

VSデバッガまたはテストシステムまたは本番システムから実行しているときにエラーが発生していますか?エクステンションを含むモジュールが正しくインストールされていることを確認してください。また、コマンドプロンプトから "iisreset"を実行してみてください。

関連する問題