在同一 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
.
在我的 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
.