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

如何通过Form标签向Razor Page提交Data对象?

如何通过Form标签向Razor Page提交Data对象?

要实现通过Form标签向Razor Page的OnPost方法提交Data对象,核心是利用ASP.NET Core的模型绑定机制,确保表单控件的name属性与Data类的属性命名匹配,具体实现方式如下:

1. 先明确Data类结构

首先需要定义公开的Data类,属性需包含公开的getter和setter,示例如下:

public class Data
{
    public string ReportName { get; set; }
    public int Year { get; set; }
    public bool IncludeDetails { get; set; }
}

2. 原生HTML表单提交方式

如果表单是纯HTML页面或非Razor页面,直接为Data的每个属性添加对应表单控件,name属性格式为data.属性名,同时必须添加防伪造令牌(Razor Page默认要求POST请求验证):

<form action="/generate-report" method="post">
    <!-- 绑定Data.ReportName属性 -->
    <input type="text" name="data.ReportName" placeholder="报表名称">
    <!-- 绑定Data.Year属性 -->
    <input type="number" name="data.Year" placeholder="年份">
    <!-- 绑定Data.IncludeDetails属性 -->
    <input type="checkbox" name="data.IncludeDetails" id="includeDetails">
    <label for="includeDetails">包含详情</label>

    <!-- 防伪造令牌,必填,否则会返回400错误 -->
    @Html.AntiForgeryToken()

    <button type="submit">导出</button>
</form>

3. Razor页面标签助手方式(推荐)

如果表单所在页面也是Razor Page,使用asp-for标签助手可以自动生成正确的name属性和防伪造令牌,更简洁可靠:

表单所在页面的PageModel代码:

namespace MyApp
{
    public class ReportRequestModel : PageModel
    {
        // 标记为可绑定属性,供表单使用
        [BindProperty]
        public Data ReportParams { get; set; }
    }
}

表单的CsHtml代码:

@page
@model ReportRequestModel
@{
}

<form asp-page="/generate-report" method="post">
    <!-- 自动生成name="data.ReportName" -->
    <input asp-for="ReportParams.ReportName" placeholder="报表名称">
    <!-- 自动生成name="data.Year" -->
    <input asp-for="ReportParams.Year" placeholder="年份">
    <!-- 自动生成name="data.IncludeDetails" -->
    <input asp-for="ReportParams.IncludeDetails" id="includeDetails">
    <label for="includeDetails">包含详情</label>

    <!-- 标签助手自动注入防伪造令牌,无需手动添加 -->
    <button type="submit">导出</button>
</form>

关键注意事项

  • 模型绑定规则:表单控件的name必须严格匹配OnPost参数名+属性名(如data.ReportName对应OnPost(Data data)中的data.ReportName),如果是嵌套对象,用.分隔属性层级(如data.User.Address.Street)。
  • 防伪造令牌:Razor Page默认启用防伪造验证,缺少令牌会返回400错误。原生表单需手动添加@Html.AntiForgeryToken(),Razor标签助手会自动处理。
  • 参数可访问性:Data类必须是公开的,属性需有公开的getter和setter,否则无法完成模型绑定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 16:20:03