我们可以<text>
在 Razor 中使用 tag 来打印一些 Iteration 中的文本上下文或者想要显示一些动态文本。
混乱
我们也可以在不使用标签的情况下执行上述操作。
问题<text>
与其他显示文本的技术相比,使用不常见
的基本好处是什么?
如果在理解问题时有任何问题,请告诉我。
我们可以<text>
在 Razor 中使用 tag 来打印一些 Iteration 中的文本上下文或者想要显示一些动态文本。
混乱
我们也可以在不使用标签的情况下执行上述操作。
问题<text>
与其他显示文本的技术相比,使用不常见
的基本好处是什么?
如果在理解问题时有任何问题,请告诉我。
主要好处是使您的代码干净、声明性和不言自明。标签还<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
}
@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 标记。