我正在测试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();
}
}
答案 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) {
...