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

使用.NET Core和Razor Pages读取GET参数时遇错误求助

问题排查与解决

先明确你代码里的几个核心误区,这是导致错误的根本原因:

错误原因分析

  1. Razor Pages命名空间与目录结构不匹配:
    Razor Pages默认约定页面文件存放在Pages目录下,后台模型类的命名空间需遵循项目名.Pages.子目录名规则。你用了SWAT2022.Views.Home,而Views是MVC视图的专属目录,框架无法识别该命名空间下的Razor Pages模型。
  2. 页面类名与文件名不匹配:
    Razor Pages要求后台模型类名必须是页面文件名+Model,你的页面是Survey.cshtml,但类名是Index1Model,框架无法将页面与模型关联。
  3. 手动读取Query参数的冗余写法:
    Razor Pages支持自动模型绑定,无需直接操作Request.Query,这种写法既不规范也容易引发错误。
  4. 视图中属性名混淆:
    你在<h2>里写的LAT:@Model.Long LONG:@Model.Lat把经纬度属性搞反了,即使参数读取成功也会显示错误值。

修正步骤

1. 调整文件结构与后台模型

  • 将Survey.cshtml和Survey.cshtml.cs移动到项目的Pages/Home目录下(无Home子目录则新建)。
  • 修改Survey.cshtml.cs代码:
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace SWAT2022.Pages.Home
{
    // 类名改为SurveyModel,匹配页面文件名
    public class SurveyModel : PageModel
    {
        public string? Lat { get; set; }
        public string? Long { get; set; }

        // 自动绑定Query参数,long是C#关键字,加@转义
        public void OnGet(string? lat, string? @long)
        {
            Lat = lat;
            Long = @long;
        }

        // 另一种简洁绑定方式:用BindProperty标记属性(支持GET请求需加SupportsGet=true)
        // [BindProperty(SupportsGet = true)]
        // public string? Lat { get; set; }
        // [BindProperty(SupportsGet = true)]
        // public string? Long { get; set; }
        // public void OnGet() { } // 无需手动赋值,框架自动绑定Query参数
    }
}

2. 修正Razor视图

修改Survey.cshtml:

@page "/home/survey" <!-- 指定路由,留空则使用默认路由 -->
@model SWAT2022.Pages.Home.SurveyModel <!-- 修正模型的命名空间与类名 -->
@{
    ViewData["Title"] = "Test";
}

<h1>Hello, world!</h1>
<h2>The time on the server is @DateTime.Now  LAT:@Model.Lat  LONG:@Model.Long </h2> <!-- 修正属性顺序 -->

3. 测试请求

启动项目后,访问类似https://localhost:xxxx/home/survey?Lat=39.9&Long=116.3的地址,即可看到正确的参数值显示。

内容的提问来源于stack exchange,提问作者robm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 06:31:10