2012-04-12 16 views
4

{controller}/{action}/{id}の代わりに、 {controller}/{action}/{id}/{another id}のような複数のパラメータを設定することは可能ですか?MVC 4:複数コントローラのアクションパラメータ

私はMVCが初めてです(単純なWebページからのものです)。可能でない場合、MVCはWebページで利用可能なUrlDataのようなヘルパーメソッドを提供していますか?

答えて

4

あなたはこのように、あなたのglobal.asaxに新しいルートをマップする必要があります。

routes.MapRoute(
    "NewRoute", // Route name 
    "{controller}/{action}/{id}/{another_id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional, another_id = UrlParameter.Optional } // Parameter defaults 
); 

は、その後、あなたのコントローラのアクションで、あなたはこのようにパラメータを拾うことができます。

public ActionResult MyAction(string id, string another_id) 
{ 
    // ... 
} 
+1

あなたのアクションメソッドのパラメータリストにその最初のIDを追加する必要があります:公共のActionResultのMyAction(文字列ID、文字列another_id)の両方のIDがで使用されるように、例の動作。 – Tommy

+0

@Tommyありがとう、 – McGarnagle

+1

私はIISエクスプレスとフルIIS 7でこれを試してきましたが、第2パラメータでエラー404.0を取得しました。私はhttp://www.asp.net/mvc/tutorials/older-versions/deployment/using-asp-net-mvc-with-different-versions-of-iis-csを読んでみましたが何も助けませんでした。助言がありますか? – DavidHyogo

3

はい、ルート内に複数のパラメータを定義できます。まず、Global.asaxファイルで経路を定義する必要があります。 URLセグメントまたはURLセグメントの一部にパラメータを定義できます。

public class MyController : Controller 
{ 
    public ActionResult Index(string id1, string id2) 
    { 
    //.. 
    } 
} 
:あなたの例を使用するには、その後、ID1とID2のセグメントを抽出し、あなたのアクションメソッドに対応する変数に割り当てるルートをマッチング解析する

{controller}/{action}/{id1}/{id2} 

MVCインフラとしてルートを定義することができます

また、クエリ文字列またはフォーム変数から入力パラメータを受け入れることもできます。たとえば:

MyController/Index/5?id2=10 

ルーティングは、より詳細に議論されてhere

関連する問題