RazorPages:模型不会在局部模型中被实例化

时间:2018-07-04 09:47:35

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

我正在测试RazorPages和.Net Core 2.1

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

我的问题是

1)紧迫的问题:在局部中:未调用OnGetAsync(也不公开void OnGet())。并在在线的模型视图中得到了NullReference-exception

@foreach (var item in Model.ImageBE) {

我尝试减少DB调用,并从构造器中明确调用OnGet,但没有区别。

2)我找不到一个例子,其中Page(index)具有Partials模型的一个实例(下面的ImageGalleryModel)。但这是编译器唯一会接受的东西。我这样做是完全错误的吗?

Index.cshtml(页面)

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

Index.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();
        }
    }

1 个答案:

答案 0 :(得分:0)

Partial不应具有与之关联的PageModel文件。如果您有要执行的C#代码,则应考虑创建ViewComponent

或者,您可以将public IList<ImageBE> ImageBE属性移动到IndexModel并在此处的OnGetAsync方法中实例化它。然后,您可以在局部零件上指定模型类型,并在当前操作时使用标签助手将其传递给局部零件:

_ImageGallery.cshtml(部分)

@model IList<ImageBE>

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