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

时间:2017-12-14 19:26:18

标签: 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> 

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

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

1 个答案:

答案 0 :(得分:3)

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

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

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>

调试器报告第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]" />

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

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

绝对是一个错误。如果某人尚未报告,您应该报告。