我的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;" })
}
}
编辑:当我尝试以下视图代码时,如下面的答案所示,我收到了编译错误:'System.Web.Mvc.HtmlHelper'没有名称的适用方法“显示”但似乎有一个名称的扩展方法。
我想知道这不是我的嵌套布局的一些副作用吗?引用的视图的布局是_ThreeColumn,后者的布局是_Layout,在_ViewStart中设置为默认值。
答案 0 :(得分:4)
首先,您应该在控制器和视图中一致地使用viewbag或viewdata,因为它使您的代码更容易理解。
public ActionResult Index()
{
ViewBag.Username = User.Identity.Name;
return View();
}
真正的问题在于@Html.Display
你不再需要@符号。它应该如下:
@ViewBag.UserName <text> - </text>
答案 1 :(得分: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---
- 输出----
Hello <b>Praveen!!</b>
---自动html编码
您好 Praveen ---生成的HTML