【问题标题】:RazorPages: Model does not get instantiated in Partial with Page ModelRazorPages:模型没有通过页面模型在部分中实例化
【发布时间】:2018-12-12 17:17:34
【问题描述】:

我正在测试 RazorPages 和 .Net Core 2.1

我刚刚采用了一个新的项目模板并创建了一个 Partial。 这些是文件的相关/添加内容。

我的问题是

1) 直接问题:在部分:OnGetAsync(也不是 public void OnGet())没有被调用。我在 View on Model on line 中得到了 NullReference-exceptiion

@foreach (var item in Model.ImageBE) {

我试图切断 DB-call 并从 contructor 显式调用 OnGet,但没有区别。

2) 我找不到 Page(index) 具有 Partials 模型实例的示例(下面的 ImageGalleryModel)。但这是编译器唯一能接受的。我这样做完全错了吗?

Index.cshtml(页面)

...
[partial name="_ImageGallery" model="Model.ImageGallery" /]
...

索引.cshtml.cs

public class IndexModel : PageModel
    {
        ApplicationDbContext mContext;
        public ImageGalleryModel ImageGallery;

        public IndexModel(ApplicationDbContext context)
        {
            mContext = context;
            ImageGallery = new ImageGalleryModel(mContext);
        }

        public void OnGet()
        {

        }
    }

_ImageGallery.cshtml(部分)

[table class="table"]
    @foreach (var item in Model.ImageBE) {
              ...

_ImageGallery.cshtml.cs

public class ImageGalleryModel : PageModel
    {
        private readonly ApplicationDbContext _context;
        public IList<ImageBE> ImageBE { get; set; }

        public ImageGalleryModel(Photiqo.Data.ApplicationDbContext context)
        {
            _context = context;
        }

        public async Task OnGetAsync()
        {
            ImageBE = await _context.ImageBE.ToListAsync();
        }
    }

【问题讨论】:

    标签: asp.net-core-2.0 razor-pages


    【解决方案1】:

    Partials 不应有与之关联的 PageModel 文件。如果您有想要执行的 C# 代码,您应该考虑创建一个ViewComponent

    或者,您可以将public IList&lt;ImageBE&gt; ImageBE 属性移动到IndexModel 并在那里的OnGetAsync 方法中实例化它。然后,您可以在部分上指定模型类型,并使用标签助手将其传递给部分:

    _ImageGallery.cshtml(部分)

    @model IList<ImageBE>
    
    <table class="table">
        @foreach (var item in Model) {
        ...
    

    【讨论】:

    • 嗨,迈克。感谢您的回复!好,可以。但是即使我没有从 PageModel 继承(或者按照你的例子),我也会得到相同的结果。我知道这“应该”有效。我已经尝试在页面的 ctor 中启动列表,并且在模型的 ctor 上的 On*Get() 使用硬编码列表覆盖 get-property。它在视图中总是以 null 结束。
    • 您显然在某处遗漏了一些东西...也许您可以查看此页面上有关强类型部分的部分:learnrazorpages.com/razor-pages/… 看看它是否为您点亮了灯泡。
    • 是的,我同意。今天晚上下班后我将从头开始。感谢您的链接和您的帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多