使用<text>标签时的基本好处是什么?</text>

时间:2013-07-27 11:51:49

标签: asp.net-mvc

我们可以在Razor中使用<text>标签在某些迭代中打印文本上下文,或者想要显示一些动态文本。

混乱

我们可以在不使用标签的情况下完成上述操作。

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

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

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:1)

@foreach(Enumerable.Range(0,10)中的var项目){user} - 这里,如果你没有放置标签,编译器将假设整个块是C#,试着找一个变量用户做不存在,抛出错误。标签要清楚地说明'用户'只是我们在html中想要的文本。

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

在另一个答案的第一行,您可以使用@:而不是tag来做同样的事情。他们做同样的事情,让C#编译器将html与代码块区分开来。看起来更像html-ish&amp;在有多行文本的情况下更方便。请参阅ScottGu's blog

这里的上下文切换意味着在生成剃刀视图页面时在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元素,但可以在剃刀视图中以相同的方式使用。它只包含一个纯文本块,它将在生成的html中呈现,不带任何html标记。

相关问题