我正在使用以下任意视图加载用户的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") ]
}
答案 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写入屏幕。