3

requestId パラメーターを必要とする Index メソッドを備えた Quote というコントローラーがあります。URLは次のように表示されます

/Quote/{requestId}. 

さらに、見積もりとルート自体に固有の ApplicantInfo というメソッドがあります

/Quote/{requestId}/ApplicantInfo. 

しかし、そのように Url.Action ヘルパーを使用すると

@Url.Action("Index","Quote",new { requestId = {requestId}})

それは私にURLを与えます

/Quote/ApplicantInfo?requestId={requestId} 

これは正しくルーティングされません。

もちろん、手動で URL 文字列を作成することもできますが、タオルを投げる前に、何か不足していないかどうかを知りたかったのです。たとえば、Url.Action正しいUrl.

ティア

ルート

routes.MapRoute(
            "QuoteInfo",
            "Quote/{requestid}", 
            new { controller = "Quote", action="Index" });

routes.MapRoute(
            "QuoteApplicant",
            "Quote/{requestid}/ApplicantInfo", 
            new { controller = "Quote", action = "ApplicantInfo" });

routes.MapRoute(
             "Default",
             "{controller}/{action}/{id}", 
     new { controller = "Home", action="Index", id = UrlParameter.Optional });
4

1 に答える 1

2

私はこのようなことをすることができました

ルート

Global.asax.csルートをオーバーライドする場所またはその場所でルートを定義する

        routes.MapRoute(
            "Organization_default",
            "{controller}/{requestId}/{action}", 
            new { 
                  controller = "home", 
                  action = "index", 
                  requestId = "default",
                  id = UrlParameter.Optional 
             }, null);

コントローラ

    public ActionResult Question(string requestId)
    {
        ViewData["value"] = requestId;
        return View();
    }

意見

@{
    ViewBag.Title = "Index";
    var value = ViewData["value"];
}

<h2>Stackoverflow @value</h2>
@Html.ActionLink("Click Here", 
        "question", "StackOverflow", new { requestId ="Link" }, new{   @id="link"})

スクリーンショット

このルートでリンクがどのように表示されるかのスクリーンショット、私は ここに画像の説明を入力してください

キャッチ

カスタムこのルートの前に定義された別のルートを持つことはできません。{controller}/{action}/{key}他のルートを実行する場合は、カスタムルートをオーバーライドします。

両方のルートを共存させる必要がある場合は、別のエリアを定義し、カスタムルートのオーバーライドを定義する必要がありますRegisterArea

public override void RegisterArea(AreaRegistrationContext context)
{
   //..custom route definition
}
于 2012-12-20T04:16:50.673 に答える