【问题标题】:onget handler razor pagesonget 处理程序剃须刀页面
【发布时间】:2022-01-19 19:14:40
【问题描述】:

我在 asp.net core razor 页面上的 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 处理程序工作?

【问题讨论】:

    标签: asp.net-core razor-pages


    【解决方案1】:

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

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

    【讨论】:

    • 无论点击表单上的哪个按钮,此方法都会命中,我需要类似 OnPost[handler]Async 的方案,如本文档中的 link
    • 我设法通过将“隐藏”输入属性添加到所需按钮&lt;button type="submit" name="handler" value="Clear" class="btn btn-primary"&gt;ClearResult&lt;/button&gt;
    【解决方案2】:

    由于参数未匹配,您无法获取方法。 假设:

    在控制器中

        [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/

    【讨论】:

    • 这可能适用于 MVC 应用程序,但问题是关于 Razor Pages 的工作方式不同。
    猜你喜欢
    • 2019-08-13
    • 2018-09-14
    • 2020-03-02
    • 2021-06-29
    • 1970-01-01
    • 2019-03-18
    • 2020-08-21
    • 2019-02-02
    • 1970-01-01
    相关资源
    最近更新 更多