在同一 Razor 页面中显示多个模型:OnGet 未触发

Show multiple Models in same Razor page: OnGet not firing

在我的 Razor .Net 6 应用程序的一个页面上,我必须显示 3 个模型的数据。所以我创建了一个模型 EigObjFact,包括三个需要的模型:

namespace StallingRazor.Model
{
    public class EigObjFact
    {
        public Eigenaar Eigenaren { get; set; }
        public IEnumerable<Model.Object> Objecten { get; set; }
        public IEnumerable<Factuur> Facturen { get; set; }
    }
}

在详细信息页面控制器中,我在 OnGet 中调用了 EigObjFact:

namespace StallingRazor.Pages.Eigenaren
{
    public class DetailsModel : PageModel
    {
        private readonly ApplicationDbContext _db;
        public DetailsModel(ApplicationDbContext db)
        {
            _db = db;
        }
    
        public async void OnGetAsync(int id)
        {            
            EigObjFact model = new EigObjFact();
            model.Eigenaren = _db.Eigenarens.Find(id);
            model.Objecten = await _db.Objectens.Where(s => s.EigenarenID == id).ToListAsync();
            model.Facturen = await _db.Facturens.Where(x => x.EigenarenID == id).ToListAsync();
            
        }
    }

}

3 个模型的映射在页面中工作正常,因为我使用:

@model StallingRazor.Model.EigObjFact

问题:详细信息页面中的 OnGetAsync 处理程序从未触发,因此在页面中使用时模型为空。

我错过了什么?

razor page的模型需要是PageModel type.So你需要用@model StallingRazor.Pages.Eigenaren.DetailsModel替换@model StallingRazor.Model.EigObjFact

并且你需要在DetailsModel中添加一个类型为EigObjFact的属性,这样你就可以从DetailsModel得到EigObjFact model:

namespace StallingRazor.Pages.Eigenaren
{
    public class DetailsModel : PageModel
    {
        [BindProperty]
        public EigObjFact model  { get; set; }= new EigObjFact();
        private readonly ApplicationDbContext _db;
        public DetailsModel(ApplicationDbContext db)
        {
            _db = db;
        }
    
        public async void OnGetAsync(int id)
        {            
            model.Eigenaren = _db.Eigenarens.Find(id);
            model.Objecten = await _db.Objectens.Where(s => s.EigenarenID == id).ToListAsync();
            model.Facturen = await _db.Facturens.Where(x => x.EigenarenID == id).ToListAsync();
            
        }
    }

}

那么如果你想在view.you中使用EigObjFact model的数据可以尝试使用@Model.model.xxx.