2012-02-17 7 views
0

ルーティング私はビューで以下のリンクを表示するインデックス()するViewResultとDirectoryControllerを持っている:はURLでアクションを表示しない -

@Html.ActionLink("My file 1", "Index", "File", new { @id = "123" }, null) <br /> 
@Html.ActionLink("My file 2", "Index", "File", new { @id = "456" }, null) <br /> 
@Html.ActionLink("My file 3", "Index", "File", new { @id = "789" }, null) <br /> 

私はリンクのいずれかをクリックすると、私は終了しますアップURLに以下の(例えば)を有する:私は本当にしたいのですがどのような

http://www.domain.com/File/Index/123

は、URLに次のようである:

http://www.domain.com/File/my-file-1

基本的に、私は実際アクションを示すことなく、URL内のコントローラ名およびカスタム名(たとえば、ファイルの名前を)見てみたいと思いますid

私がクリックしたリンクに関係なく、それらのすべては、適切なIDを渡すFileControllerのIndex()メソッドを引き続き指し示す必要があります。

どうすればいいですか?

どのようにカスタムルートを作成すればよいですか?

おかげで、一般的な概要として

+0

ルートの一部としてファイル名を表示するときは、ファイル名に '%'などの特殊文字がないことを確認してください。 QueryStringパラメータとは異なり、URLで変換されますが、ルーティングによって解析できないため、呼び出しがクラッシュします。その特定の問題の詳細については、私の答えと、この記事のリンク先の別の記事を参照してください:http://stackoverflow.com/questions/9123203/asp-net-mvc-passing-a-string-parameter-to -an-action-using-redirecttoaction/9183451#9183451 – Nope

+0

ヘッドアップありがとう – Vlince

答えて

1

:あなたが何をしたいか

はあなたにいくつかの更新を行う必要がありますユーザー

優しいされているURLを変換ルートマッピング

などを作成することですコントローラ/ global.asax

ルート例

あなたのアクションで
context.MapRoute(
       "FileNameMapping", 
       "File/{filename}", 
       new {controller="File", action = "Index" }); 

あなたはあなたではなくCasiniよりも、IIS上でこれを実行することがあります場合は

Public FileResult Index(string filename){ 
// do your logic for handleling file name 
//and return file 
} 
+0

ありがとうございました。私はあなたのルートをグローバルのデフォルトルートの上に追加しました。私のリンクをクリックすると、私はまだ同じ動作をします。私はまだ普通のURLを取得します...コントローラ/アクション/ ID。コントローラー/カスタム名を取得するためには何が欠けていますか?それでidパラメータに沿ってIndex()メソッドが呼び出されますか? – Vlince

+0

@Vince:あなたの質問を読んでいる間、その名前からIDを特定できますか? – cpoDesign

0

のようなものを持って、あなたは望ましい結果を達成するために再書き込みURLを使用することができます。

関連する問題