1

私は任意のビューでユーザーのIDの名前をロードしています:

var oUser = db.User.FirstOrDefault(x => x.ID == User.Identity.Name.Remove(0, 6));
    if (oUser == null || (oUser.firstname == null|| oUser.lastname == null))
        ViewBag.User = User.Identity.Name.Remove(0, 6);
    else
        ViewBag.User = oUser.firstname + " " + oUser.lastname;

しかし、毎回ロードするのではなく、毎回 _layout にユーザー名の文字列を入れたいと思っています。ビューバッグにロードすることは可能かもしれませんが、フィールドをレイアウトに渡すコードをどこに置くべきかわかりません。

ちなみに、これは機能せず、私が探しているものではありません:

 @if(Request.IsAuthenticated) {
        <text>Welcome <b>@Context.User.Identity.Name</b>!
        [ @Html.ActionLink("Log Off", "LogOff", "Account") ]</text>
    }
    else {
        @:[ @Html.ActionLink("Log On", "LogOn", "Account") ]
    }
4

2 に答える 2

2

OK、コントローラから JavaScript を登録するための最も簡単な解決策は非常に明白でしたが、パターンに慣れていない人にとってはイライラします。

名前付きセクションを使用して、javascript を配置する場所を見つけます

[名前付きセクション][1]を使用できます。

_Layout.cshtml

<head>
    <script type="text/javascript" src="@Url.Content("/Scripts/jquery-1.6.2.min.js)">
    @RenderSection("JavaScript", required: false)
</head>

ビューのこのコード

_SomeView.cshtml

@section JavaScript
{
    @Html.Raw(ViewBag.message)
}

そしてコントローラーに入れました

ViewBag.message = @"<script type='text/javascript' language='javascript'>alert(""Hello World!"")</script>"; ;
于 2012-09-18T15:47:02.030 に答える
1

あなたが言ったことに従う:

このコードを_layoutに移動します

@{
  var oUser = db.User.FirstOrDefault(x => x.ID == User.Identity.Name.Remove(0, 6));
     if (oUser == null || (oUser.firstname == null|| oUser.lastname == null))
        ViewBag.User = User.Identity.Name.Remove(0, 6);
     else
        ViewBag.User = oUser.firstname + " " + oUser.lastname;
 }

 @ViewBag.User

最初のビットが_layoutのコードとして実行されているところ。そして最後の行は、Viewbag.Userに文字列を画面に書き込むように指示しているだけです。

于 2012-07-25T19:55:26.723 に答える