Asp.net MVC3:如何从数据库中输入用户名文本

时间:2012-07-25 19:40:13

标签: asp.net asp.net-mvc-3 layout username

我正在使用以下任意视图加载用户的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") ]
    }

2 个答案:

答案 0 :(得分: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>"; ;

答案 1 :(得分: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中的String写入屏幕。