1

HomeController の Index アクションに次のコードがあり、その下のコードがレイアウトにあります。Home/Index ビューを呼び出すと、UserName プロパティが設定されていませんが、ブレークポイントで値を調べると、コントローラーで設定されていることがわかります。

コントローラ:

public ActionResult Index()
{
    ViewData.Add("UserName", User.Identity.Name);
    return View();
}

意見:

@{ 
    if (User.Identity.IsAuthenticated)
    {
    <text>Hello </text>
    @ViewBag.UserName <text> - </text>
    @Html.ActionLink("Sign Out", "LogOff", "Account", null, new { style = "font-weight: bold;" })
    }
}

編集:以下の回答で示唆されているように、次のビュー コードを試すと、コンパイル エラーが発生します: .

これは、ネストされたレイアウトの副作用ではないのでしょうか? 引用されたビューのレイアウトは _ThreeColumn で、後者のレイアウトは _ViewStart でデフォルトとして設定された _Layout です。

4

2 に答える 2

4

まず、コードを理解しやすくするため、コントローラーとビューの両方で一貫して viewbag または viewdata を使用する必要があります。

public ActionResult Index()
{
    ViewBag.Username = User.Identity.Name;
    return View();
}

本当の問題は@Html.Display、@ 記号を再び必要としないことにあります。次のようになります。

@ViewBag.UserName <text> - </text>
于 2011-08-01T17:15:15.783 に答える
3

@Html.Display("@ViewBag.UserName") に変更 @ViewBag.UserName

また、読みやすくするために以下を実行できます(コントローラー内)

ViewBag.UserName=  User.Identity.Name;

Razor ビューの @variableName は、HTML でエンコードされたテキストを自動的に生成します。下記参照

---A razor view start---

    @{
       string name= "<b>Praveen</b>";       
    }

    Hello @name     
    <br><br>
   Hello  @Html.Raw(name)
---A razor view end---

- 出力 - -

こんにちは <b>Praveen!!</b> ---自動的に html エンコード

こんにちはPraveen ---html をそのまま作成

于 2011-08-01T17:34:56.590 に答える