2

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

助言がありますか?

4

2 に答える 2

3

問題は、「loginName」というパラメータを指定するためのルートが設定されていないことです。

デフォルトルートがリクエストを飲み込んでいると推測しており、[name]値を「id」というパラメータに割り当てようとしています。パラメータの名前を「loginName」から「id」に変更すると、うまくいくと思います。

ルーティングエンジンは、各URLセグメントを名前付きパラメーターにマップすることに注意してください。デフォルトルートは次のようになります "{controller}/{action}/{id}""{controller}/{action}/{loginName}"「loginName」という名前のパラメータが必要な場合は、デフォルトルートとは異なるセグメントを持つルートを考え出す必要があるため、デフォルトルートが最初に一致しませんでした。

于 2009-06-29T04:19:04.097 に答える
0

試す:

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

コントローラが次のような場合:

public ActionResult DetailsbyUserName(string veryVeryLongParameterName);

ActionLinkのrouteValuesパラメーターでnew{veryVeryLongParameterName="YourParamValue"}を使用する必要があると思います。

また、そのためのルートが必要です。

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

于 2009-06-29T04:17:41.350 に答える