onget handler 剃须刀页面

onget handler razor pages

我在 asp.net 个核心剃须刀页面上的 GET 表单上有一个按钮

<form method="get" asp-page="Index">
<button type="submit" asp-page="Index" asp-page-handler="Something" class="btn btn-primary"></button>
</form>

以及背后的代码

public IActionResult OnGetSomething(){
//... some code
return Page();
}

我的问题是永远不会执行 onget 处理程序代码 如果表单是 POST onpost 处理程序可以正常工作,但如果是 GET 则不起作用

那么我在这里缺少什么?以及如何使 onget 处理程序工作?

你不能去获取方法,因为参数不匹配。 假设:

在控制器中

    [HttpGet]
  public IActionResult Create()
        {
            return View();
        }
//Post Method
[HttpPost]
[ValidateAntiForgeryToken]
        public async Task<IActionResult> Create(string Name)
        {
        }

在视图中:

<form asp-action="Create">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="Name" class="control-label"></label>
                <input asp-for="Name" class="form-control" />
                <span asp-validation-for="Name" class="text-danger"></span>
            </div>]

            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-primary" />
            </div>
        </form>

然后它进入 post 方法,因为它有 1 个参数(名称)。如果我们没有任何输入或参数不相同,那么它会使用不同的方法。

是方法重载的概念

在方法重载的细节中https://www.geeksforgeeks.org/c-sharp-method-overloading/

当您使用 GET 提交表单时,浏览器会丢弃表单操作中的查询字符串值,并用从表单字段构建的新查询字符串替换它们。您可以通过向表单添加适当的隐藏字段来命中您的处理程序:

<form method="get" asp-page="Index">
    <input type="hidden" name="handler" value="Something" />
    <button type="submit" class="btn btn-primary">Get</button>
</form>