为什么 .cshtml 文件在 .cshtml.cs 文件中看不到@model,并且我收到 Null 引用异常?

Why .cshtml file don't see @model in .cshtml.cs file and i get Null References exception?

提问人:Alparslan Aslan 提问时间:1/29/2023 最后编辑:marc_sAlparslan Aslan 更新时间:1/29/2023 访问量:181

问:

我创建了一个 ASP.NET Core 6 MVC 项目,我想在请求时看到“测试”,但我得到 .但是,当我创建 Razor 页面应用程序并在该项目上尝试相同的操作时,我没有收到任何错误。NullReferenceException

我在 Ubuntu 22.04 上运行应用程序,我使用 .NET Core 6.0 Framework。

namespace MyApp.Namespace
{
    public class TestModel : PageModel
    {
        public string? Message { get; set; }
        
        public void OnGet()
        {
            Message = "Test";
        }
    }
}

视图:

@model MyApp.Namespace.TestModel

<dir>@Model.Message</dir>

例外:

NullReferenceException:对象引用未设置为对象的实例。

Test.cshtml 中的 AspNetCoreGeneratedDocument.Views_Home_Test.ExecuteAsync()

@Model.在线留言

我尝试更改命名空间并在 Razor 页面中添加指令。一切都没有改变。@page

ASP.NET-CORE-MVC 剃刀页 nullreferenceexception

评论

0赞 Steve 1/29/2023
MVC != Razor Pages 在 MVC 中,返回到传递模型的视图
0赞 Alparslan Aslan 1/29/2023
我在 HomeController 中返回 View()。我知道我不能在 mvc 结构中使用 Tetst.cshtml.cs 中的模型。我必须使用 ViewBags。不是吗?

答:

0赞 Jackdaw 1/29/2023 #1

根据上面的代码,应在 Razor 视图文件中进行以下声明:

@page
@using MyApp.Namespace
@model TestModel 

<dir>@Model.Message</dir>

有关如何创建 Razor Pages 和 声明的详细说明,您可以在此处的 Microsoft 文档中找到:Razor Pages@page@model

0赞 Xinran Shen 1/29/2023 #2

MVC 需要在 View 和控制器之间传递模型。当您想显示后端的值时,您需要返回带有模型的视图。

创建模型以传递数据:

 public class TestModel
    {
        public string? Message { get; set; }
    }

在 HTTP GET 操作中设置默认值:

public IActionResult Index()
        {
            
            TestModel test = new TestModel();
            test.Message = "Test";

            //return view with model
            return View(test);
        }

视图

@model TestModel

<h1>@Model.Message</h1>

现在,您可以在视图中显示“测试”:

enter image description here