我注意到Razor <text>
标记拒绝遵循任何格式约定。例如,在格式化cshtml
文档时,我最终会得到如下代码:
@MyHelper.MyMethod(@<div>
<p>Hello world</p>
</div>)
@MyHelper.MyMethod(@<text>
<p>Hello world</p>
</text>)
请注意,这不是Razor模板函数特有的,<text>
块在任何地方都会做同样的事情。
客户端HTML标记(及其内容)(例如<div>
)遵循我指定的格式样式,但无论我在何处添加(或删除)标签特定选项... 中的<text>
元素,没有任何效果。在前面的示例中,期望的结果是<text>
元素内容的格式类似于<div>
元素内容。
是否有任何技巧或解决方法可以在<text>
元素上强制执行与其他块级客户端HTML元素相同的格式样式( <div>
,<section>
等等)
我见过Razor语言的其他格式问题,例如here和here,所以这并非没有先例,似乎可能没有解决方案。无论哪种方式,也许有人遇到过修复。
这是一个Razor 2.X网站,建于VS 2010
附录
(我已经厌倦了这个。)
也许这个问题在2012年已经解决;不知道,还没有更新。但是,<text>
块,@
- 前缀块等等,格式不正确。
另一个例子,这次是@
- 前缀块(构造和)
@foreach (var foo in bar) {
<div>@(foo.A)</div>
<div>@(foo.B)</div>
@foreach (var qux in foo.C) {
<div>@(qux.D)</div>
<div>@(qux.E)</div>
}
}
看起来或多或少,对吗?是的,不幸的是它实际上在语法上无效。内部@
上的foreach
- 前缀是不允许的,因为它出现在外部块的不间断范围内(外部foreach
)。
解决方案?忽略内部@
中的foreach
。格式化时会发生什么?
@foreach (var foo in bar) {
<div>@(foo.A)</div>
<div>@(foo.B)</div>
foreach (var qux in foo.C) {
<div>@(qux.D)</div>
<div>@(qux.E)</div>
}
}
太棒了,失去了内在的压痕。大便。
好的,那些<text>
块怎么样,它们必须对某些东西有用,对吧?当然,将foreach
块中的外部<text>
块的内容包装起来。现在,就Razor而言,@
- 为内部foreach
添加前缀在语法上是有效的。
@foreach (var foo in bar) {
<text>
<div>@(foo.A)</div>
<div>@(foo.B)</div>
@foreach (var qux in foo.C) {
<div>@(qux.D)</div>
<div>@(qux.E)</div>
}
</text>
}
好的,很好;然而,虽然这有效,但它确实证明了我原来问题的问题。 现在<text>
块内容不符合缩进。为什么我们不能拥有:
@foreach (var foo in bar) {
<text>
<div>@(foo.A)</div>
<div>@(foo.B)</div>
@foreach (var qux in foo.C) {
<div>@(qux.D)</div>
<div>@(qux.E)</div>
}
</text>
}
或者更好的是,拧紧<text>
块并允许@
- 在其他人范围内的前缀构造:
@foreach (var foo in bar) {
<div>@(foo.A)</div>
<div>@(foo.B)</div>
@foreach (var qux in foo.C) {
<div>@(qux.D)</div>
<div>@(qux.E)</div>
}
}
TL;博士
打电话给我肛门,叫我疯了。没关系;据我所知,无论格式设置如何,此产品都无法正常工作。有谁知道如何强制VS 2010 Razor格式化行为如上所述? (或者,这只是我的OCD的一些梦想吗?)
答案 0 :(得分:1)
它的解决方法是:
cshtml
文件XML (Text) Editor