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.
我能够重现这一点。我有一个理论:
考虑原始代码(带有行号):
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 行。
我认为调试器接收带有剃刀行号的错误信息,并根据文件布局行号使用它。
绝对是一个错误。如果有人还没有报告,您应该报告。
| 归档时间: |
|
| 查看次数: |
283 次 |
| 最近记录: |