1

我的 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”没有名为“Display”的适用方法,但似乎有一个名为“Display”的扩展方法.

我想知道这是否不是我的嵌套布局的一些副作用?引用视图的布局为_ThreeColumn,后者的布局为_Layout,在_ViewStart 中设置为默认值。

4

2 回答 2

4

首先,您应该在控制器和视图中始终使用 viewbag 或 viewdata,因为它使您的代码更易于理解。

public ActionResult Index()
{
    ViewBag.Username = User.Identity.Name;
    return View();
}

真正的问题在于@Html.Display您不再需要 @ 符号。它应该如下:

@ViewBag.UserName <text> - </text>
于 2011-08-01T17:15:15.783 回答
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---

- 输出 - -

你好 <b>Praveen!!</b> ---自动html编码

你好Praveen --- html 按原样生成

于 2011-08-01T17:34:56.590 回答