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 中使用用户名字符串,而不是每次都加载它。将其加载到 viewbag 可能是一种可能性,但我不知道将代码放在哪里以将字段传递给布局。

顺便说一句,这行不通,这不是我要找的:

 @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

好的,从控制器注册 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 回答