为什么我的ViewBag设置在我的视图中不可用?

时间:2011-08-01 17:12:21

标签: asp.net-mvc asp.net-mvc-3 viewbag

我的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中设置为默认值。

2 个答案:

答案 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