【问题标题】:My Post form is not reaching the action method inside my asp.net mvc core web application我的 Post 表单没有到达我的 asp.net mvc 核心 Web 应用程序中的操作方法
【发布时间】:2020-10-30 16:32:09
【问题描述】:

我正在开发一个 asp.net MVC 核心 Web 应用程序,我有以下路由规则:-

app.UseEndpoints(endpoints => {

                endpoints.MapControllerRoute(
                    name: "IP",
                    pattern: "IP/{controller=Home}/{action=Index}/{id?}");
            });
            app.UseEndpoints(endpoints => {

                endpoints.MapControllerRoute(
                    name: "Info",
                    pattern: "Info/{controller=Home}/{action=Index}/{id?}");
            });
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
                endpoints.MapRazorPages();
            });

然后在我的创建表单中,我定义以下内容以在根据当前 url 发回表单时使用不同的 url:-

<form method="post" action="@(!Context.Request.Path.Value.ToString().ToLower().Contains("/info") ? "/IP/submissions/create/": "/info/submissions/create/")" >

这是我的后期操作方法:-

 [AllowAnonymous]
        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Create([Bind("Submission,SubmissionQuestionSubmission")] SubmissionCreate sc )
        {

但目前当我发回表单时,不会调用操作方法......有什么想法吗?并且浏览器控制台将引发此错误:-

HTTP400: BAD REQUEST - The request could not be processed by the server due to invalid syntax.
POST - https://localhost:44363/info/Submissions/Create/

【问题讨论】:

  • 您是否在页面之间重复使用相同的表单标签?通常你会指定 asp-controller asp-action 并让框架根据你的路由格式化 url。
  • @JeremyLakeman 如果我使用asp-controllerasp-action,它将引用第一个路由规则-在我们的例子中是IP-,所以它不会使用当前路由
  • 在您的情况下,您可能需要一个路由参数pattern: "{name}/{controller=Home} ...,然后绑定并传递到您的视图并添加asp-route-name="@Model.name"。或“命名路线”asp-route="IP".
  • @JeremyLakeman 你能就此提供更多建议吗?

标签: c# asp.net-core asp.net-core-mvc asp.net-mvc-routing


【解决方案1】:

这是一个“错误请求”,因为您没有使用 form tag helper。哪个应该为您构建操作 url 并添加防伪令牌。

但是,您的路由和控制器操作应该具有 1-1 映射。现在,您有 3 条不同的路线来执行相同的操作。这些操作应该如何知道使用了哪条路由以及要采取什么行动?您是否打算检查每个操作中的原始 url?

您是否尝试将控制器拆分为areas?在这种情况下,添加 asp-controllerasp-actionasp-route-... 属性将导致表单标签助手为您构建正确的 url。

或者您更愿意为每个操作添加一个额外的参数,指示使用了哪个 url。然后您可以将其添加到您的模型中,以便您的视图可以将其作为路由参数提供。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    • 2023-03-13
    • 2019-06-26
    • 1970-01-01
    • 2021-02-15
    相关资源
    最近更新 更多