gpt4 book ai didi

c# - 将 @ 放在 Html.Raw 之前如何工作?

转载 作者:行者123 更新时间:2023-11-30 19:16:54 25 4
gpt4 key购买 nike

我认为 Razor 中的 @ 表示 C# 代码。所以,在下面的代码中,我不会费心在 Html.Raw() 之前给出另一个 @,因为它已经包含在 C# 代码中:

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

但事实证明,helper 实际上需要在它之前使用 @ 来表示它的 context,如前所述 here否则它不会产生任何东西。

有人可以更详细地解释为什么会这样吗?

最佳答案

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

基本上你可以这样想:

  • if 前面的第一个 @ 声明 if block 中的代码是 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

关于c# - 将 @ 放在 Html.Raw 之前如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20722578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com