3

私は次のモデルを持っています:

public class AccountDetailsViewModel
{
   public Guid ID { get; set; }
   public string FirstName { get; set; }
   public string LastName { get; set; }
}

次に、次のアクションを持つ AccountController があります

public ActionResult Details(Guid? id)
{
    var model = new AccountDetailsViewModel
    {
        ID = 2,
        FirstName = "FirstName",
        LastName = "LastName"
    };
    return View(model)
}

そして、このアクションのビューを強くタイプします

@model AccountDetailsViewModel
...
@Html.ActionLink("My Page", "Details", "Account")
...
//display info about user

アイデアは、ユーザーがidパラメーターなしでアカウント/詳細URLにアクセスすると、彼自身の情報が表示され、idがURLに存在する場合、そのidを持つユーザーに関する情報が表示されるということです。

問題は、ユーザーが id (誰かの別のページ) で URL にアクセスすると、マイ ページ (ビューの上部) のリンクが同じページを指していることです。ActionLink は現在表示されているユーザーの ID を取得しますが、これは問題です。マイ ページ リンクが常にアカウント/詳細 (マイ ページ) を指すようにするためです。この ActionLink の ID は、最初に考えたように @Model から取得されたものではありません。私がよく知らない他の魔法があるようです。

他のページと同じ問題があります。

では、何が起こっていて、この種の行動を防ぐにはどうすればよいでしょうか?

4

1 に答える 1

2

ルーティング変数が何であるかを指定しない場合、ASP.NET MVC はルーティング変数を再利用します。したがって、ルーティングに一致する他の誰かのページにいる場合、明示的に使用するように言わなくても、その ID が使用されます。

@Html.ActionLink("My Page", "Details", "Account", new { id = "" })

ID パラメーターをクリアするには、空白に設定するだけです。

于 2012-10-18T20:29:57.160 に答える