首页 > 解决方案 > Razor 页面部分视图:模型未定义

问题描述

TLDR:问题是,当我尝试从 Model 获取 ID 时看到以下错误(下面代码的第 8 行):

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

细节:

我想让我的部分 HTML 可重用。有一个名为“InfoBox”的大 div,其中包含一些信息,这些信息放置在我网站的多个位置。我决定创建部分剃刀页面。这是我的制作方法:

_TextBoxInfoPartial.cshtml.cs

public class _TextBoxInfoPartialModel : PageModel
{
    [BindProperty]
    public string ID { get; set; }

    public IActionResult OnGet()
    {
        ID = ""; //default

        return Page();
    }
}

_TextBoxInfoPartial.cshtml

@page
@model Definicje.Pages.Shared._TextBoxInfoPartialModel

<button type="button" class="visibility-toggler" visibility-toggler="#hint-math@(Model.ID)">Wstaw wzór</button>
<div id="hint-math@(Model.ID)" class="hintbox">
    some text
</div>

要将部分放在另一个 cshtml 文件中,我使用以下行:

@await Html.PartialAsync("_TextBoxInfoPartial", new _TextBoxInfoPartialModel { ID = g.ID + "" })

我不明白。我正在为 Partial 指定模型,为什么它没有定义呢?

标签: asp.netasp.net-corerazor-pages

解决方案


对于局部视图,删除@page指令。

@model Definicje.Pages.Shared._TextBoxInfoPartialModel

<button type="button" class="visibility-toggler" 
                  visibility-toggler="#hint-math@(Model.ID)">Wstaw wzór</button>
<div id="hint-math@(Model.ID)" class="hintbox">
    some text
</div>

现在Model将是_TextBoxInfoPartialModel您从另一个视图传递的对象。

当您将@page指令添加到视图文件时,它的行为开始有所不同,更像是一种操作方法 - 您可以通过 http 请求访问它。

另一个观察是,如果您的文件名以_前缀开头,则上述路由功能将不起作用。不能通过 Http 请求直接访问。

所以对于你的部分视图,不要使用@page指令


推荐阅读