You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 09:06:37