索引视图中的ASP.NET Core Model null错误

时间:2016-07-20 03:51:15

标签: razor visual-studio-2015 asp.net-core

请参阅下面的错误部分。其他相关代码如下:

模型

public class Blog
    {
        public int BlogId { get; set; }
        public string Url { get; set; }

        public List<Post> Posts { get; set; }
    }

    public class Post
    {
        public int PostId { get; set; }
        public string Title { get; set; }
        public string Content { get; set; }

        public int BlogId { get; set; }
        public Blog Blog { get; set; }
    }

BlogPostController

public IActionResult Index()
        {
            return View("~/Views/BlogsTest/Index.cshtml");
        }

查看 [Index.cshtml]:

@model IEnumerable<ASPCoreCodeFirstApp.Models.Blog>

<p>
    <a asp-controller="BlogPost" asp-action="Create">Create New</a>
</p>
<table class="table">
    <thead>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.Url)
            </th>
            <th></th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.Url)
                </td>
                <td>
                    <a asp-controller="BlogPost" asp-action="Edit" asp-route-id="@item.BlogId">Edit</a>
                </td>
                <td>
                    <a asp-controller="BlogPost" asp-action="Create" asp-route-id="@item.BlogId">Edit</a>
                </td>
            </tr>
        }
    </tbody>
</table>

错误 @foreach (var item in Model)....line

我可以看到Index方法被调用,当我将断点放在Index.cshtml文件的@foreach (var item in Model)行时,我得到Model为null,浏览器抛出以下错误。博客表确实有数据。即使它没有数据,foreach循环应该返回空结果而不是NULL异常错误。索引操作方法中的视图相对路径似乎是写入的,因为Index.cshtml视图确实被调用。我可能缺少什么?:

NullReferenceException: Object reference not set to an instance of an object.
MoveNext in Index.cshtml, line 22

文件夹层次结构

上面的模型位于下面突出显示的Model.cs文件中:

enter image description here

1 个答案:

答案 0 :(得分:3)

您的视图是一个强类型视图,需要Blog对象的列表(确切地说,IEnumerable):

@model IEnumerable<ASPCoreCodeFirstApp.Models.Blog>  

对于强类型视图,您必须从控制器操作传递视图所需类型的对象,以便视图引擎能够呈现视图(即使它只是一个空列表):

View("ViewName", new List<Blog>())