質問

私はメニューのための私のsite.masterに次のコードを持っています:

<ul id="menu">              
    <li><%= Html.ActionLink("My Contact Info", "DetailsbyUserName/" + Html.Encode(Page.User.Identity.Name), "Users")%></li>
</ul>

:私はURLの上に置くと、

私はそれが指すことがわかり

http://site/Users/DetailbyUserName/[name]

正確である。

の問題は、私は以下のUsersコントローラクラスにブレークポイントを置くときます:

public ActionResult DetailsbyUserName(string loginName)
{
    UserInfo user = repo.GetUserByName(loginName);
    return View(user);
}

loginNameパラメータは常にnullであると思われます。

任意の提案ですか?

役に立ちましたか?

解決

問題は、ルートは、「ログイン名」と呼ばれるパラメータを指定するために設定されていないということです。

私はあなたのデフォルトルートがあなたの要求を飲み込むと、「ID」と呼ばれるパラメータに[名前]値を代入しようとしていることを推測しています。あなたは、「ログイン名」から「ID」へのパラメータの名前を変更した場合、私はそれがあなたのために働くだろう賭けます。

ルーティングエンジンが指定されたパラメータに各URLのセグメントをマップすることを忘れないでください。 "{controller}/{action}/{id}":デフォルトルートは次のようになります。あなたは、「ログイン名」という名前のパラメータを持っているしたい場合は、デフォルトルートが最初に一致しないように、デフォルトルートとは異なっていたセグメント"{controller}/{action}/{loginName}"を持っていたルート、思い付くする必要があります。

他のヒント

試してください:

Html.ActionLink("My Contact Info", "DetailsbyUserName", "Users", new { loginName = Html.Encode(Page.User.Identity.Name), null);

あなたのコントローラは、このようなものである場合:

public ActionResult DetailsbyUserName(string veryVeryLongParameterName);

私はあなたがActionLinkののrouteValuesパラメータに{veryVeryLongParameterName = "YourParamValue"}新しいを使用する必要があります推測します。

そしてまた、あなたはそのためのルートが必要です。

私は、あまりにもこれに非常に新しいです少なくとも、それは私がActionLinksについて理解何だ、誰かがそれをよりよく説明することができます願っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top