0

我们可以<text>在 Razor 中使用 tag 来打印一些 Iteration 中的文本上下文或者想要显示一些动态文本。

混乱

我们也可以在不使用标签的情况下执行上述操作。

问题<text>与其他显示文本的技术相比,使用不常见 的基本好处是什么?

如果在理解问题时有任何问题,请告诉我。

4

2 回答 2

1

主要好处是使您的代码干净、声明性和不言自明。标签还<text>可以消除 HTML/C# 上下文切换中的一些不便(没有它,您将被迫使用它@:来指示上下文切换)。

所以,<text>更像是一种语法糖,而不是一些必需的东西。

考虑以下代码片段。它是无效的,如果尝试运行它,你最终会出现异常。

@foreach (var item in Enumerable.Range(0, 10))
{
    user
}

我们有两种选择来处理这个问题。它们都是有效的,但首先似乎更加一致和声明性。

@foreach (var item in Enumerable.Range(0, 10))
{
    <text>user</text>
}

@foreach (var item in Enumerable.Range(0, 10))
{
    @:user
}
于 2013-07-27T11:56:19.623 回答
1

@foreach (var item in Enumerable.Range(0, 10)) { user } - 在这里,如果你不放标签,编译器会假设整个块是 C#,尝试找到一个不存在的变量 user,抛出错误。该标签清楚地表明“用户”只是我们想要在我们的 html 中的文本。

它可以使用<p>, <span>或任何其他现有的 html 标签来完成,但这会将每个文本放在一个段落中(带有额外的间距和所有)或其他标记 - 您可能不想要。看,重点是,如果您已经有一些 html 标签,编译器会将其理解为 html 并正确处理。但是,在@AlexK 的示例中,您不需要额外的 html 元素,只想放置一些纯文本 - 您可以使用它与 C# 代码区分开来。

另一个答案的第一行,你可以用 @: 代替标签做同样的事情。他们做同样的事情,使 C# 编译器区分 html 和代码块。看起来更 html-ish & 在你有多行文本的情况下更方便。参考 ScottGu 的博客

这里的上下文切换意味着在生成剃刀视图页面时在 C# 代码块和 html 标记之间来回切换。我们为 asp.net mvc 视图编写的代码是 C# 和 html 代码的组合,例如

1.  <ul>
2.      @foreach (var p in persons)
3.      {
4.          <li>
5.              @p.Name
6.              <a href="some_url/@p.Id">details</a>
7.          </li>
8.      }
9.  </ul>

其中第 1、4、7、9 行是 html,2、3、5、8 是 C#,第 6 行是两者。所以在编译的时候,编译器一定要清楚什么是代码,什么是标记!因此,基于一些符号(@ 代表代码,标签代表 html 等)编译器从 C3 到 html 来回转换并创建最终的 html。

标签的独特之处<text>在于,它不是标准的 html 元素,但可以以相同的方式在 razor view 中使用。它只是包含一个纯文本块,该块将在生成的 html 中呈现,没有任何 html 标记。

于 2013-07-27T16:27:32.183 回答