使用ASP时不识别大括号.. NET MVC Razor在VS2015中的应用
本文关键字:Razor MVC VS2015 应用 NET ASP 识别 使用 | 更新日期: 2023-09-27 18:18:27
我在VS2015的cshtml Razor视图中遇到了一个奇怪的问题。我认为这一定是一个剃刀的错误,但如果有一个完整的检查和解决方法的建议,我将感激不尽。
这个问题是@{}
代码块中的花括号不能正确解析。我在foreach
循环中有一个if
语句,如果我使用花括号来包围if
动作,我会得到一个编译错误。有趣的是,else
语句后面的花括号看起来很好。
用VS的颜色编码来演示会更容易一些,但是这里。
如此:
@{
var nestLevel = 0;
foreach (var t in xmlHelper.GetProperties(asm, ViewBag.xmlType, "root"))
{
var type = @t.Item3.PropertyType;
if (xmlHelper.builtInTypes.Contains(type.ToString()))
<p>@t.Item1 @t.Item2 @t.Item3.PropertyType</p>
else
{
nestLevel++;
}
}
} //VS shows the @{} code block ending here as expected
但是,如果我现在在if动作周围加上花括号,它将无法编译:
@{
var nestLevel = 0;
foreach (var t in xmlHelper.GetProperties(asm, ViewBag.xmlType, "root"))
{
var type = @t.Item3.PropertyType;
if (xmlHelper.builtInTypes.Contains(type.ToString()))
{
<p>@t.Item1 @t.Item2 @t.Item3.PropertyType</p>
}
else
{
nestLevel++;
}
} //VS now incorrectly shows the @{} code block ending here
}
任何想法/建议吗?
删除这一行的@:
var type = @t.Item3.PropertyType;
你已经在一个c#代码区,所以你不需要@来引用变量,如果你在一个HTML区域。
可以在下一行这样做,因为当你以可识别的HTML开始一行时,它会假设切换回HTML,并跳出c#。这是一个HTML区域
<p>@t.Item1 @t.Item2 @t.Item3.PropertyType</p>
作为题外话,当我想强制使用HTML模式以便输出变量的值时,我经常使用这个快捷方式。
@if (t.isExample)
{
@: @t.OutputThis
}
当你使用@令牌剃须刀视图,你告诉引擎停止解析html,并试图解释c#语言,剃须刀是够聪明,知道什么时候停止解析,因为令牌你要写是html语言的一部分,因此您需要指定此时剃须刀应该阅读你的c#代码,那你为什么在你的if语句需要再次打开识别@令牌。如果您想转义@令牌,因为您试图将@写成html,那么请使用@@代替@。希望对大家有所帮助