0

次のようなコントローラーメソッドがあります

public ViewResult Index(string id, string participant="", string flagged = "")

idこのコントローラーの global.asax のルート値です。他の値を通常の引数として渡したいので、リンクは次のようになります

.../controller/Index/id?participant=yes&flagged=no

MVC 3 で Razor スクリプトを使用してこのようなリンクを生成する方法はありますか?

4

2 に答える 2

7

routeValuesActionLink メソッドの引数にすべてのパラメーターを渡すことができます。

@Html.ActionLink(
    "go to index",                  // linkText
    "index",                        // actionName
    new {                           // routeValues
        id = "123", 
        participant = "yes", 
        flagged = "no" 
    }
)

デフォルトのルーティング設定を想定すると、次が生成されます。

<a href="/Home/index/123?participant=yes&amp;flagged=yes">go to index</a>

アップデート:

投稿したコメントをさらに詳しく説明するとLength=6、たとえば ActionLink が URL を生成した場合、これは間違ったオーバーロードを使用したことを意味します。たとえば、これは間違っています:

@Html.ActionLink(
    "go to index",             // linkText
    "index",                   // actionName
    "home",                    // routeValues
    new {                      // htmlAttributes
        id = "123", 
        participant = "yes", 
        flagged = "no" 
    }
)

これが間違っている理由は、各パラメーター名に付けたコメントから明らかです。そのため、ヘルパー メソッドの正しいオーバーロードを選択するために、Intellisense を注意深く読んでいることを確認してください (幸運にも Razor で Intellisense が動作している場合:-))。

コントローラー名を指定する場合の正しいオーバーロードは次のとおりです。

@Html.ActionLink(
    "go to index",             // linkText
    "index",                   // actionName
    "home",                    // controllerName
    new {                      // routeValues
        id = "123", 
        participant = "yes", 
        flagged = "no" 
    },
    null                       // htmlAttributes
)

nullが最後の引数として渡されることに注意してください。htmlAttributesそれがパラメーターに対応するものです。

于 2012-05-02T13:47:15.230 に答える
3

これには ActionLink を使用できます。

@Html.ActionLink("Title",
                 "ActionName", 
                  new {id = 1, participant = "yes", flagged = "no"})
于 2012-05-02T13:47:13.157 に答える