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

ASP.NET Core Razor应用按钮点击事件无法触发如何解决?

问题根源
  • Razor Pages 有独立的路由匹配规则,和 MVC 控制器的 Action 调用逻辑不同,你现有的写法同时不符合两个核心规则:
    1. PageModel 中的自定义处理器方法必须遵循 On[HTTP请求方式][自定义Handler名] 的命名约定,直接命名为 UploadSmall 无法被路由系统识别
    2. Url.Action() 是用于 MVC 控制器 Action 的路由生成方法,不适用于 Razor Pages 的 PageModel 处理器
修复方案

方案1:适配GET请求的快速修复(仅适合测试触发逻辑,不适合实际文件上传)

  1. 先修改 Index.cshtml.cs 中的方法命名,符合GET请求的处理器约定:
// 替换原来的UploadSmall方法
public void OnGetUploadSmall()
{
    Console.WriteLine("in the click event handler");
}
  1. 修改前端按钮的跳转地址,使用 Razor Pages 专属的路由生成方式:
<button type="button" id="uploadsmall" onclick="location.href='@Url.Page("Index", "UploadSmall")'">
    Upload Small File
</button>

方案2:适配文件上传场景的标准写法(推荐)

文件上传需要用POST请求携带二进制数据,所以用表单提交的方式更合理:

  1. 前端修改为带文件选择框的表单,使用 asp-page-handler 绑定后端处理器:
@page
@model IndexModel
@{
    ViewData["Title"] = "File Upload Demo";
}

<form method="post" enctype="multipart/form-data">
    <input type="file" name="uploadFile" required />
    <button type="submit" asp-page-handler="UploadSmall">Upload Small File</button>
</form>
  1. 后端修改为POST类型的处理器,接收上传的文件:
public IActionResult OnPostUploadSmall(IFormFile uploadFile)
{
    Console.WriteLine("in the click event handler");
    // 这里可以添加上传到Azure Blob的业务逻辑
    return Page();
}
额外说明

你之前新增控制器不生效的原因是默认 Razor Pages 模板没有开启控制器路由支持,如果要使用控制器需要在 Program.cs 中添加如下配置:

// 服务注册部分添加
builder.Services.AddControllers();
// 中间件配置部分添加
app.MapControllers();

纯 Razor Pages 场景无需额外引入控制器,使用自带的 PageHandler 即可满足需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:36:04