.NET 8 Blazor 怎么在表单中使用 [SupplyParameterFromForm]

admin 百科 14
.NET 8 中不存在 [SupplyParameterFromForm] 特性;真实存在的是 [SupplyParameterFromQuery] 和 [SupplyParameterFromRoute],仅支持 GET 场景的查询或路由参数绑定;表单 POST 应使用 EditForm + 模型绑定处理。

.NET 8 Blazor 怎么在表单中使用 [SupplyParameterFromForm]-第1张图片-佛山资讯网

在 Blazor Server 或 Blazor WebAssembly(.NET 8+)中,[SupplyParameterFromForm] 并不是 .NET 8 原生支持的特性 —— 它并不存在于官方 API 中。 很可能你混淆了以下两个概念:

1. [SupplyParameterFromQuery][SupplyParameterFromRoute]

这是 .NET 8 中真实存在的、用于组件参数绑定的特性,但仅支持从 URL 查询字符串或路由参数注入,不支持 HTML 表单提交(POST body)

  • [SupplyParameterFromQuery]:从 URL 查询参数(如 ?name=John&age=25)自动填充组件参数
  • [SupplyParameterFromRoute]:从路由模板(如 /user/{id:int})提取值
  • 二者都只适用于 @page 组件(即路由组件),且仅作用于 GET 请求上下文

2. 表单数据处理的正确方式:使用 EditForm + Input* 组件 + 模型绑定

Blazor 中处理表单(尤其是 POST 场景)的标准做法是:不依赖参数特性,而是用 EditForm 绑定一个模型对象,并在 OnValidSubmit 中处理提交逻辑

  • 定义一个 C# 模型类(如 UserInput),包含属性和验证特性(可选)
  • 在组件中声明该模型实例,并传给 <editform model="@model"></editform>
  • <inputtext></inputtext><inputnumber></inputnumber> 等子组件绑定字段
  • 提交时,模型属性已由框架自动更新,直接使用即可

示例:

<EditForm Model="@user" OnValidSubmit="HandleValidSubmit">
    <InputText @bind-Value="user.Name" />
    <InputNumber @bind-Value="user.Age" />
    <button type="submit">提交</button>
</EditForm>
<p>@code {
private UserInput user = new();</p><pre class='brush:php;toolbar:false;'>private void HandleValidSubmit()
{
    // 此时 user.Name 和 user.Age 已被表单自动更新
    Console.WriteLine($"收到:{user.Name}, {user.Age}");
}

public class UserInput
{
    public string? Name { get; set; }
    public int Age { get; set; }
}

登录后复制

}

标签: html app 后端 路由 c# 表单提交 .net

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~