8

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

public ActionResult Foo2(int uId)
{
    return View();
}

これにアクションリンクを追加しました:

@Html.ActionLink("Test", "Foo2", "Main", new { uId = 12 })

しかし、クリックしたときの結果は次のとおりです。

.../Main/Foo2?Length=8

なぜこれが機能しないのですか?

4

3 に答える 3

6

ActionLinkメソッドの間違ったオーバーロードを使用しています。以下を使用する必要があります。

@Html.ActionLink("Test", "Foo2", "Home", new { uId = 12 }, null)

new { uId = 12 }このオーバーロードは、HTML 属性としてではなく、ルート値として使用されると解釈します。使用しているオーバーロードnew { uId = 12 }は、アクション リンクの TML 属性を持つオブジェクトとして解釈し ます。上記で指定されたオーバーロードを呼び出すことによりnull、5 番目のパラメーターとして渡されます。これは、HTML 属性に使用され、オブジェクトはルート値として使用されます。

レンダリングされたものを見ることで、何が起こっているかを簡単に確認できます。

@Html.ActionLink("Test", "Foo2", "Home", new { uId = 12 })
// Renders: <a href="/Home/Foo2?Length=4" uId="12">Test</a>

@Html.ActionLink("Test", "Foo2", "Home", new { @class = "test-class" })
// Renders: <a class="test-class" href="/Home/Foo2?Length=4">Test</a>

@Html.ActionLink("Test", "Foo2", "Home", new { uId = 12 }, null)
// Renders: <a href="/Home/Foo2?uId=12">Test</a>

@Html.ActionLink("Test", "Foo2", "Home", new { uId = 12 }, new { @class = "test-class" })
// Renders: <a class="test-class" href="/Home/Foo2?uId=12">Test</a>

これで少しは解決することを願っています。

于 2013-05-29T10:45:15.763 に答える
5

MVC には、同じパラメーター数を持つメソッドがいくつかあるため、間違ったオーバーロードが呼び出されています。これを試して:

@Html.ActionLink("Test", "Foo2", "Main", new { uId = 12 }, null)

この質問も参照してください。

于 2013-05-29T10:43:14.497 に答える
0

別のStackoverflow Questionによると、次の順序を試す必要があります。

@Html.ActionLink("Test", "Foo2", "Main", new { uId = 12 }, null)
于 2013-05-29T10:48:48.720 に答える