asp.net-core - Razor 页面中 foreach 循环的空引用

标签 asp.net-core razor-pages

编辑:删除 @page Index.cshtml 中的注释修复了问题。

调用页面时出现错误:

System.NullReferenceException: Object reference not set to an instance of an object. at AspNetCore.Views_Inspector_Inspect.get_Model()

这是由这一行引起的:@foreach (var rule in Model.Items) 果然,在调试时,我看到 Model确实为空。

但我使用所需的对象来调用此 View ,如下所示:return View(res);

此外,使用 DisplayTextFor 获取模型数据,如下所示: <h2>@Html.DisplayTextFor(model => model.CardNumber)</h2>确实有效并显示正确的数据。

我在这里做错了什么?

完整代码如下。

Controller :

public IActionResult Inspect() {
    var res = GetDataObject();
    return View(res);
}

检查.cshtml:

@page
@model mynamespace.DataObject

<style>
    table, th, td {
        border: 1px solid black;
        border-collapse: collapse;
    }
    th, td {
        padding: 5px;
        text-align: left;    
    }
</style>

<h2>@Html.DisplayTextFor(model => model.SomeItem)</h2> <!-- THIS WORKS -->


    <table class="table" style="width: 50%">
        <thead>
        <tr>
            <th>Header1</th>
            <th>Header2</th>
            <th>Header3</th>
            <th>Header4</th>
        </tr>
        </thead>
        <tbody>
            @foreach (var rule in Model.SomeCollection) <!-- Model is null -->
            {
                <tr>
                    <td>
                        @Html.DisplayTextFor(modelItem => rule.Name)
                    </td>
                </tr>
                <tr>
                    <td>
                        @Html.DisplayTextFor(modelItem => rule.Name)
                    </td>
                </tr>
                <tr>
                    <td>
                        @Html.DisplayTextFor(modelItem => rule.Name)
                    </td>
                </tr>
                <tr>
                    <td>
                        @Html.DisplayTextFor(modelItem => rule.Name)
                    </td>
                </tr>
                <tr>
                    <td>
                        @Html.DisplayTextFor(modelItem => rule.Name)
                    </td>
                </tr>
            }
        </tbody>
    </table>
</p>

最佳答案

根据评论。

此问题的解决方案是删除 @page 关键字。

@page 的作用是指定它是 Razor 页面。

您的困惑在于您认为 Razor 页面与 Razor 语法相同。

.cshtml 文件扩展名指定该文件可以具有 Razor 语法,但这并不意味着它是 Razor 页面。

MVC 和 Razor Pages 遵循不同的命名约定,在 Startup.cs 文件中设置不同,并且将使用不同的文件夹结构。

例如,Index.cshtml razor 页面将从 Index.cshtml.cs 文件方法 Get() 获取其模型,该方法将返回一个页面(模型)

发生错误是因为 razor 页面不需要 Controller 提供任何内容,它不应该由 Controller 提供服务。

关于asp.net-core - Razor 页面中 foreach 循环的空引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52493655/

相关文章:

linq - .net core - 将函数列表与单个函数组合或合并到单个函数

c# - 绑定(bind)到 Heroku 动态 $PORT 并不断出错?

.net - Azure AD Microsoft 帐户客户端是公共(public)的,因此不应显示 'client_assertion' 和 'client_secret'

c# - 使用 ImageProcessor 从 MemoryStream 保存/加载图像时出现一般 GDI+ 错误

asp.net-core - AspNetCore OData 无法在 .NET Core 3.0 上运行

c# - 使用 Entity Framework Core 将文件存储在数据库中

c# - 如何将多个 HttpClient 参数传递/注入(inject)到类型化的 HttpClientClass?

razor-pages - 您可以在 Razor 页面中使用 IAsyncEnumerable 来逐步显示标记吗?

asp.net-core - 如何在_Layout.cshtml共享Razor页面中添加配置设置

c# - Http POST 在 asp.net core 中不起作用,仅当服务器停止时才起作用