2

コントローラーのパスを取得するにはどうすればよいですか? たとえば、次のように HtmlHelper のパスを取得できます。

    private static string GetVirtualPath(HtmlHelper htmlhelper)
    {
        string virtualPath = null;
        TemplateControl tc = htmlhelper.ViewDataContainer as TemplateControl;

        if (tc != null)
        {
            virtualPath = tc.AppRelativeVirtualPath;
        }

        return virtualPath;
    }
4

4 に答える 4

5

編集: 以下は、コントローラーを含むアセンブリへのパスと、コントローラー アクションを含むクラスの型名を示します。アーロン、これらを組み合わせれば、あなたが求めているものが得られるのではないでしょうか?

string assemblyPath = Assembly.GetExecutingAssembly().CodeBase;
string typeName = this.GetType().FullName;

たとえば、次のような結果が得られます

file:///C:/Projects/TestApp/TestApp.UI/bin/TestApp.UI.DLL
TestApp.UI.Controllers.TestController

「標準」の ASP.NET MVC の方法でコントローラーを配置して名前を付ける場合、上記の特定の組み合わせにより、C# ファイルへの正しいフル パスが得られる場合があります。

C:/Projects/TestApp/TestApp.UI/Controllers/TestController.cs

または相対パス:

Controllers/TestController.cs

以下は、コントローラーアクションへのルートを提供します。

1) string path = Request.Url.AbsolutePath

2) string appPath = Request.ApplicationPath;
   string absPath = Request.Url.AbsolutePath;
   string path = appPath.Length <= 1 ? 
       absPath : absPath.Replace(appPath, "");

TestController の Index アクション ( http://localhost:50027/Test/Index ) のリクエストの例: 上記は以下を返します。

1) /Test/Index
2) /Test/Index

ベース URL がhttp://localhost:50027/blogの Web サイトの場合、TestController の Index アクション ( http://localhost:50027/blog/Test/Index )のリクエストの例:

1) /blog/Test/Index
2) /Test/Index
于 2009-04-21T19:04:21.660 に答える
1

そこにあるメソッドは、ビューの相対aspxファイル名を返します。これは実際にはHtmlHelperの場所ではありません。

コントローラーのパスが必要だと言うとき、実際にはどういう意味ですか?コントローラは、どこかのアセンブリにコンパイルされたクラスです。コントローラのソース.csファイルの場所を取得しますか?または何か違う?

于 2009-04-21T18:59:20.517 に答える
0

アーロン、あなたはクワインを書いているように聞こえますが、これはいくつかのユニットテストの足場か何かのためだと思いますか?たぶん、あなたは本当にあなたがしていることのいくつかのためにビルドスクリプトを使いたいですか?ビルド時にコントローラーディレクトリでいくつかのプロセスを実行するコマンドをプロジェクトのプロパティページに配置できますか?これがあなたがやろうとしていることとまったく違うなら申し訳ありません。

于 2009-04-23T03:47:43.920 に答える
0

このようにコントローラーの名前を取得できます

Url.RequestContext.RouteData.Values["controller"]

コントローラー名を取得した後、メソッドを使用してパスを解決できます

ResolveClientUrl("~/<ControllerName>") 
于 2009-04-21T19:15:39.120 に答える