You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core中AppSettings值在Controller可正常输出,传至视图触发空引用错误

核心报错原因
  • 本质是把MVC和Razor Pages两套Razor编程模型的规则混在一起用了,直接触发了空引用:
    1. 你的视图里加了Razor Pages专属的@page指令,这个指令会让运行时把这个视图识别为独立的Page路由,完全忽略MVC控制器通过return View(acc)传进来的模型实例,这时候渲染时@Model本身就是null,你去访问@Model.PaymentFormUrl、@Model.ApplicationId这些属性,自然直接抛NullReferenceException。
    2. 你定义的AccountPayment类同时继承了PageModel基类,本身就不适合作为普通MVC控制器的传递模型——PageModel是Razor Pages的页面对象基类,普通视图模型不需要继承这个类。
    3. 你观察到控制台输出配置值是正常的,是因为那段代码是直接在Controller方法执行的,根本没走到视图渲染的流程,和视图抛空引用是完全独立的两个执行路径,不能用控制台正常输出判断模型传递是成功的。
    4. 你测试时删掉@model行能正常运行,是因为这时代码里没有任何对Model对象的访问操作,自然不会触发空引用,根本没有解决根本问题。
匹配项目结构的两种解决方式
  • 如果你要继续用现有MVC控制器的逻辑:
    1. 删掉视图文件里的@page指令,MVC的普通视图不需要这个标记,加了反而会触发路由和模型绑定的冲突。
    2. 修改AccountPayment类的定义,去掉对PageModel的继承,把它改成纯粹的视图模型类即可。
    3. 如果项目开启了可空引用类型检查,给属性加上可空标注,避免配置取值为空时触发编译警告或运行时错误:
      public string? PaymentFormUrl { get; set; }
      public string? ApplicationId { get; set; }
      public string? LocationId { get; set; }
      
  • 如果你是想用Razor Pages的开发模式:
    1. 把当前MVC控制器AccountPayments方法里的配置读取、模型赋值逻辑,全部挪到对应AccountPayment : PageModel的OnGet()方法里。
    2. 删掉MVC控制器里对应的Action方法,让这个视图通过Razor Pages的路由机制加载,这时候@Model就会自动绑定到PageModel实例,不会出现空引用问题。

内容的提问来源于stack exchange,提问作者Anorion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 15:06:02