未触及的 asp.net 模板中的 NullReferenceException (Visual Studio)

NullReferenceException in untouched asp.net template (visual studio)

提问人:Efe Zaladin 提问时间:6/15/2021 最后编辑:Efe Zaladin 更新时间:1/4/2023 访问量:524

问:

我正在尝试学习 asp.net 并且我已经从 Visual Studio 中的模板创建了一个 asp.net 项目。我使用了带有单个用户身份验证选项的模板 MVC。当我在不更改任何内容的情况下运行项目时,如果我单击“登录”按钮,我会从 Login.cshtml 的第 20 行获得 NullReferenceException。

我曾试图自己弄清楚,但由于缺乏经验,我做不到;我也没有在网上找到关于这个问题的任何信息。

感谢您的帮助。

此外,如果您无法重现错误,只需 ping 我,我将共享源代码。

-编辑

繁殖步骤:

> (VS 16.9.3) Create a new project 
> ASP.Net Web Application (.NET Framework)
> .NET Framework = 4.7.2, project template = MVC, Authentication = Individual User Accounts 
> Debug IIS Express (https://localhost:44316) 
> Firefox: Warning: Potential Security Risk Ahead, The certificate is not trusted because it is self-signed. 
> Accept Risk 
> Click "Log in" 
> NullReferenceException thrown at Login.cshtml, line 20

Login.cshtml,第 20 行:

@Html.TextBoxFor(m => m.Email, new { @class = "form-control" })

异常详细信息:

System.NullReferenceException
  HResult=0x80004003
  Message=Object reference not set to an instance of an object.
  Source=<Cannot evaluate the exception source>
  StackTrace:
<Cannot evaluate the exception stack trace>
C# asp.net ASP.NET-MVC NullReferenceException

评论

2赞 ProgrammingLlama 6/15/2021
请提供创建项目的确切步骤。
0赞 mason 6/15/2021
显示堆栈跟踪,提供最小的可重现示例等。
0赞 Efe Zaladin 6/15/2021
@Llama 添加了详细信息
1赞 ProgrammingLlama 6/15/2021
我已经按照您的确切步骤操作,我无法重现它。我建议重新创建项目,或者重新安装Visual Studio。
0赞 Efe Zaladin 6/15/2021
我可以请@Llama帮忙?你能把你创建的解决方案发给我吗?如果这个问题是由编译等或模板本身引起的,我想要实验。您可以将其发送至 [email protected]

答:

-1赞 Efe Zaladin 6/16/2021 #1

我已经解决了这个问题。我遇到的现象被称为第一次机会异常,我不知道它是如何工作的,也不知道它的用途,但这些异常不会干扰程序流程,我能够跳过它们。为了不必在每次抛出此类异常时手动跳过,我只是禁用了异常。

老实说,我对这个话题一无所知,所以我可能不是 100% 正确。如果您对此有更多了解,我仍然会感谢您的知识。

延伸阅读:https://github.com/dotnet/aspnetcore/issues/23649#issuecomment-662098484 https://learn.microsoft.com/en-us/visualstudio/debugger/managing-exceptions-with-the-debugger?view=vs-2019

评论

1赞 JohnG 6/16/2021
“我只是禁用了异常。”...在不久的将来,你会后悔的。
0赞 regalsoft 1/4/2023 #2

我也遇到过这个问题。我不确定为什么会发生这种情况,但我确实找到了解决方法。从 AccountController 接收 LoginViewModel 对象时,该对象具有 null 值。更改 AccountController Login Get 方法,以在调用视图时包含新的 LoginViewModel。

    public ActionResult Login(string returnUrl)
    {
        ViewBag.ReturnUrl = returnUrl;
        return View(new LoginViewModel());
    }

这也适用于 Register 方法,只不过它需要 RegisterViewModel。