Razor异常错误的行号在表单中

Apo*_*llo 5 c# asp.net-mvc razor asp.net-mvc-5

为什么.NET在表单标记内发生异常时识别错误的行号?这是一个Razor .cshtml文件中的简单测试用例:

@{
    string[] test = new string[2];
    test[0] = "stuff";
}
@test[0] <br />

<form action="~music/addToCart" method="post">
    <input type="text" name="test" value="@test[2]" />
    <input type="submit" value="Submit" />
</form> 
Run Code Online (Sandbox Code Playgroud)

"索引超出数组范围"的异常显示test[0]实际异常的行test[2].调试器还显示错误的行.似乎在表单标记内发生异常时,表单上方的语句被错误地标识为错误的位置.我已经尝试使用Html帮助程序BeginForm()并得到类似的行为.

使用Microsoft .NET Framework版本:4.0.30319; ASP.NET版本:4.7.2117.0.Visual Studio社区2017.

Jua*_*anR 4

我能够重现这一点。我有一个理论:

考虑原始代码(带有行号):

1  - @{
2  -     ViewBag.Title = "Home Page";
3  - }
4  - 
5  - @{
6  -     string[] test = new string[2];
7  -     test[0] = "stuff";
8  - }
9  - @test[0] <br />
10 - 
11 - <form action="~music/addToCart" method="post">
12 -    <input type="text" name="test" value="@test[2]" />
13 -    <input type="submit" value="Submit" />
14 - </form>
Run Code Online (Sandbox Code Playgroud)

调试器报告第 9 行有错误,但我认为这是 razor 的行号。如果我们取出任何纯文本(非剃刀):

1  - @{
2  -     ViewBag.Title = "Home Page";
3  - }

4  - @{
5  -     string[] test = new string[2];
6  -     test[0] = "stuff";
7  - }
8  - @test[0] <br />

9  -    <input type="text" name="test" value="@test[2]" />
Run Code Online (Sandbox Code Playgroud)

我们看到错误发生在 Razor 上下文中的第 9 行。

我认为调试器接收带有剃刀行号的错误信息,并根据文件布局行号使用它。

绝对是一个错误。如果有人还没有报告,您应该报告。