如何在Html.Raw之前使用@?

时间:2013-12-21 19:14:15

标签: c# asp.net-mvc razor

我认为Razor中的@意味着C#代码。因此,在下面的代码中,我不会在@之前给出另一个Html.Raw(),因为它已经包含在C#代码中:

@if (Session["User"] == null)
{
    Html.Raw("Welcome User <br>");
}

但事实证明,帮助者实际上需要@才能表示上下文,如上所述here,否则它不会生成任何内容。

有人可以解释一下为什么会更详细吗?

1 个答案:

答案 0 :(得分:10)

另一篇文章解释了为什么您需要@代码前面的额外Html.Row符号。

基本上你可以这样思考:

  • @前面的第一个if表示if块中的代码是C#代码,它将被解析为。

  • 执行C#代码时,Html.Raw(...)会生成一个MvcHtmlString对象,但您实际上并没有对它做任何事情。如果您正在编写纯代码,那么您可能会写一些代码将MvcHtmlString发送到响应输出缓冲区或类似的东西

因此,@前面需要的第二个Html.Raw(..)实际上是指定您希望在输出上下文中呈现函数结果的简单方法,而不是简单地留下悬挂。

另一个例子可能会有所帮助。此示例仅与您的Razor问题间接相关 - 关于执行函数和丢弃结果的概念。

假设您有以下函数定义:

  int Add(int a, int b)
  {
      return a + b;
  }

现在,您可以像这样调用此函数:

  Add(2, 3);

上面的代码会执行添加,但结果将被丢弃。你没有做任何事情。与之对比:

  Console.WriteLine(Add(2, 3));    // now the result is being written to the console