Razor-pages 表单没有点击 post 方法

问题描述 投票:0回答:2

我的帖子表单不起作用 - C# 类中的方法甚至没有执行。 我尝试了一些找到的解决方案,但仍然无法处理。

我的简单视图ReportBug.cshtml:

@page
@model Report

<div class="m-3 p-3">
    <div class="text-center">
        <h4 class="display-4">Report a bug</h4>
    </div>

    <form method="post">
        <div class="row">
            @(Html.Kendo()
                .TextBoxFor(t => t.Title)
                .Placeholder("Title")
                .HtmlAttributes(new { style = "width: 25%" })
            )
        </div>
            <button type="submit" class="btn btn-primary">Submit</button>
    </form>
</div>

我的 C# 课程是:

public class ReportBugModel : PageModel
{
    public void OnGet()
    {
    }

    public void OnPost()
    {
    }

    public void OnPost(Report report)
    {
    }
}

如您所见,我尝试在不带参数和使用 1 个参数(报告模型)的情况下调用此方法。 总结一下:

  • 我有
    @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
    在视图导入
  • 我尝试过标签助手
    asp-antiforgery="true"

在这些 post 方法被命名为

OnPostReport(Report report)
之前,我使用了标签助手
asp-page-handler="Report"
,但也失败了。

到目前为止,单击

Submit
按钮后,我的页面仅重新加载,控制台中没有任何错误。

#编辑 这是生成的 HTML 代码:

<div class="m-3 p-3">
    <div class="text-center">
        <h4 class="display-4">Report a bug</h4>
    </div>

    <form method="post">
        <div class="row">
            <span class="k-widget k-textbox" style="width: 25%;"><input id="Title" name="Title" style="width: 100%;" value="" data-role="textbox" aria-disabled="false" class="k-input" placeholder="Title" autocomplete="off"></span><script>kendo.syncReady(function(){jQuery("#Title").kendoTextBox({"placeholder":"Title"});});</script>
        </div>
        <button type="submit" class="btn btn-primary">Submit</button>
    <input name="__RequestVerificationToken" type="hidden" value="CfDJ8Bbl_ufFcklEjkehOGdz8BtSJK0b5YyLKm-ID2YYYWig_98ZBjFzd9-V_cDDrtBJqiKXJmW7blydpKIKa9qdz9sZZldP3cmya-BVho3uUIbW3_Ob-BVrLmAUi_KHq3eKEAE7nrELLwzebuzXTmnsP6sK2MubiEb3lK3mqOzmVERB2NmXvpI43QmwL-lGUr43Rw">
    </form>

</div>
asp.net-core razor-pages
2个回答
2
投票

您可能对Razor Pages有误解,请先了解一下入门文档

如何解决您的问题,您可以按照以下步骤操作:

1.更改您的 Razor 页面

ReportBug.cshtml
(您必须将
@model Report
更改为
 @model ReportBugModel
):

@page
@model ReportBugModel      //change here...
<div class="m-3 p-3">
    <div class="text-center">
        <h4 class="display-4">Report a bug</h4>
    </div>

    <form method="post">
        <div class="row">
            @(Html.Kendo()
                .TextBoxFor(t => t.Report.Title)    //also change here...
                .Placeholder("Title")
                .HtmlAttributes(new { style = "width: 25%" })
            )
        </div>
        <button type="submit" class="btn btn-primary">Submit</button>
    </form>
</div>

2.更改 Razor 页面后端代码

ReportBug.cshtml.cs
:

public class ReportBugModel : PageModel
{
    public void OnGet()
    {
    }
    public Report Report { get; set; }   //add this...
    public void OnPost(Report report)
    {
    }
}

结果:


0
投票

如果您使用的是使用 areas 的 Razor Pages 表单,请确保特定区域中的

_ViewImport.cshtml
文件包含此行(或者您已在表单文件中为特定区域配置了
TagHelpers
):

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

如果

TagHelpers
对于模型类不可见,则在点击 POST 处理程序时,结果是一个带有类似
This page isn’t working right now
的消息的页面。

© www.soinside.com 2019 - 2024. All rights reserved.