使用してASP.net MVC site.masterリンクHTML.ActionLink
-
20-08-2019 - |
質問
私はメニューのための私の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について理解何だ、誰かがそれをよりよく説明することができます願っています。