Razor后台报错:当前上下文中不存在‘Ok’,需实现表单预填充
问题解决:Razor页面中“Ok不存在”错误及表单预填充实现
错误原因
Ok()是ASP.NET Core Controller基类提供的API响应方法,而Razor页面的PageModel并未继承该方法,因此会报“当前上下文中不存在名称‘Ok’”的错误。同时你的代码还存在以下问题:
- 变量名笔误:定义了
var x但返回时使用未定义的q - EF Core方法错误:不存在
ToListArraySync(),异步查询应使用官方提供的ToListAsync()/FirstOrDefaultAsync()
修正代码及表单预填充实现
1. 修正PageModel中的OnGetDetails方法
首先在页面模型类中定义用于表单绑定的属性,然后修正查询逻辑并将数据赋值给属性,最后返回页面结果:
public class YourPageModel : PageModel { private readonly YourDbContext _context; // 定义用于预填充表单的属性 public string CustomerName { get; set; } public string Address { get; set; } public DateTime? SaleDate { get; set; } public YourPageModel(YourDbContext context) { _context = context; } public async Task<IActionResult> OnGetDetails(string custName) { // 关联查询并筛选指定客户的数据 var customerSale = await _context.Customer .Join(_context.Sales, cust => cust.CustId, sale => sale.CustId, (cust, sale) => new { cust.Name, cust.Address, sale.SaleDate }) .FirstOrDefaultAsync(item => item.Name == custName); if (customerSale != null) { // 将查询结果赋值给页面属性,用于表单预填充 CustomerName = customerSale.Name; Address = customerSale.Address; SaleDate = customerSale.SaleDate; } // 返回页面,而非API风格的Ok响应 return Page(); } }
2. Razor页面绑定属性预填充表单
在对应的.cshtml页面中,使用asp-for标签助手将页面属性绑定到文本框,页面加载时会自动填充数据:
<div class="form-group"> <label>客户名称</label> <input type="text" class="form-control" asp-for="CustomerName" /> </div> <div class="form-group"> <label>客户地址</label> <input type="text" class="form-control" asp-for="Address" /> </div> <div class="form-group"> <label>销售日期</label> <input type="datetime-local" class="form-control" asp-for="SaleDate" /> </div>
补充:若需AJAX动态填充表单
如果是通过AJAX调用OnGetDetails来动态更新表单,可将返回值改为JsonResult:
public async Task<IActionResult> OnGetDetails(string custName) { var customerSale = await _context.Customer .Join(_context.Sales, cust => cust.CustId, sale => sale.CustId, (cust, sale) => new { cust.Name, cust.Address, sale.SaleDate }) .FirstOrDefaultAsync(item => item.Name == custName); return new JsonResult(customerSale); }
内容的提问来源于stack exchange,提问作者JustWantsToCode
相关产品推荐
相关产品推荐

