ASP.NET Razor Pages点击跳转后FindAsync不执行仅刷新URL才加载数据
问题原因
- 你列表页的
Kopen按钮被包裹在method="post"的表单标签内,button元素默认的type属性为submit,点击时会默认发起POST请求到目标页面,而你BestellenModel中只有处理GET请求的OnGet方法,因此点击按钮时不会触发数据查询逻辑。 - 手动刷新地址栏时浏览器发起的是GET请求,匹配到
OnGet方法,因此数据可以正常加载。
解决方案
优先推荐修改列表页的跳转方式,将按钮改为超链接(页面跳转场景使用超链接更符合HTTP语义):
找到列表页Index.cshtml中Kopen按钮的代码:
<button asp-page="Bestellen" asp-route-id="@item.Id" class="btn btn-primary btn-sm">Kopen</button>
替换为:
<a asp-page="Bestellen" asp-route-id="@item.Id" class="btn btn-primary btn-sm">Kopen</a>
如果需要保留button元素,也可以为按钮指定提交方式为GET:
<button asp-page="Bestellen" asp-route-id="@item.Id" formmethod="get" class="btn btn-primary btn-sm">Kopen</button>
额外优化建议
- 你贴出的
BestellenModel代码末尾多了一个多余的闭合大括号},请删除避免编译错误。 - 建议为
OnGet方法增加空值判断,避免查询不到数据时出现空引用异常:
public async Task<IActionResult> OnGet(int id) { Bedrijven = await _db.Bedrijven.FindAsync(id); if (Bedrijven == null) { return NotFound(); } return Page(); }
内容的提问来源于stack exchange,提问作者Marnix Bolier
相关产品推荐
相关产品推荐

