我注意到 Razor<text>标签拒绝遵循任何格式约定。例如,在格式化cshtml文档时,我最终得到如下代码:
@MyHelper.MyMethod(@<div>
<p>Hello world</p>
</div>)
@MyHelper.MyMethod(@<text>
<p>Hello world</p>
</text>)
请注意,这也不特定于 Razor 模板函数,<text>任何地方的块都会做同样的事情。
客户端 HTML 标记(及其内容)例如<div>遵循我指定的格式样式,但是无论我在哪里添加(或删除)<text>元素Tag Specific Options...,都没有效果。期望的结果是<text>元素内容的格式与<div>前面示例中的元素内容一样。
是否有任何技巧或变通方法可以在<text>元素上强制使用与其他块级客户端 HTML 元素(<div>、、<section>等)相同的格式样式?
我已经看到 Razor 语言的其他此类格式问题,例如here和here,因此这并非没有先例,而且似乎可能没有解决方案。无论哪种方式,也许有人遇到了修复。
这是一个 Razor 2.X 网站,在 VS 2010 中构建
附录
(我已经厌倦了这个。)
或许这个问题已经在 2012 年解决了;不知道,没更新。但是,<text>块、@带前缀的块等格式不正确。
另一个例子,这次是@-prefixed 块(结构等)
@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>
}
}
看起来或多或少都很好,对吧?是的,不幸的是它实际上在语法上是无效的。不允许@在内部使用-prefix,因为它出现在外部块(外部)的不间断范围内。foreachforeach
解决方案?@从内部省略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>块内容不遵守 indentation。为什么我们不能有:
@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 格式按照描述的方式运行?(或者,这只是我的强迫症的一些白日梦吗?)