简体   繁体   English

使用 HttpPost 方法提交表单后,ASP.NET Core 重定向到同一页面

[英]ASP.NET Core redirecting to the same page after submitting a form with HttpPost method

I am developing a web application using ASP.NET Core 2.0.我正在使用 ASP.NET Core 2.0 开发一个 Web 应用程序。 First of all i have a main view called NewOrder.cshtml:首先,我有一个名为 NewOrder.cshtml 的主视图:

@using Microsoft.AspNetCore.Mvc.Rendering
@using MokaKukaMap.Orders.ViewModels.Models
@model MokaKukaMap.Orders.ViewModels.Models.NewOrderViewModel

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

@Html.Partial("_NewOrder")

In this main view I use a form in a partial view (_NewOrder.cshtml):在这个主视图中,我在局部视图 (_NewOrder.cshtml) 中使用了一个表单:

<form asp-controller="NewOrder" asp-action="CreateOrder" class="well">
    <div id="form-horizontal">
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        <input type="hidden" id="eventID" class="form-control">
        <div class="form-group">
            <label asp-for="Address" class=""></label>
            <div class="">
                <input asp-for="Address" class="form-control">
                <span asp-validation-for="Address" class="text-danger"> </span>
            </div>
        </div>
        <div class="form-group">
            <label asp-for="PhoneNumber" class=""></label>
            <div class="">
                <input asp-for="PhoneNumber" class="form-control">
                <span asp-validation-for="PhoneNumber" class="text-danger"> </span>
            </div>
        </div>
    </div>
    <div id="ErrorsBox" class="alert alert-danger" style="display: none;"></div>
    <div class="form-group">
        <div class="">
            <input type="submit" formnovalidate="formnovalidate" value="Submit new order" class="btn btn-primary" />
        </div>
    </div>
</form> 

And of course I have the corresponding controller and HttpPost action method, which is the following:当然我有相应的控制器和HttpPost动作方法,如下:

public class NewOrderController : Controller
{
    private readonly INewOrderSaverRequestHandler _newOrderSaverRequestHandler;

    public NewOrderController(INewOrderSaverRequestHandler newOrderSaverRequestHandler)
    {
        _newOrderSaverRequestHandler = newOrderSaverRequestHandler;
    }

    public IActionResult NewOrder()
    {
        return View();
    }

    [HttpPost]
    public IActionResult CreateNewOrder(NewOrderViewModel newOrder)
    {
        _newOrderSaverRequestHandler.Handle(newOrder, ModelState);

        return RedirectToPage("NewOrder");
    }
}

The issue is that if I click on the submit button, the page is redirected to the following url: " http://localhost:13078/NewOrder/CreateOrder ".问题是,如果我单击提交按钮,页面将重定向到以下 url:“ http://localhost:13078/NewOrder/CreateOrder ”。 But what I would like is to stay on the same page, so at " http://localhost:13078/NewOrder/NewOrder " url但我想留在同一页面上,所以在“ http://localhost:13078/NewOrder/NewOrder ” url

I have already tried some solutions which I've found here at stackoverflow:我已经尝试了一些我在 stackoverflow 找到的解决方案:

  • Using return RedirectPage("NewOrder") - with this I am still redirected to .../NewOrder/CreateOrder so to an 404 error page.使用return RedirectPage("NewOrder") - 这样我仍然被重定向到 .../NewOrder/CreateOrder 所以到 404 错误页面。 Furthermore I tried to use it with other cobinations like return RedirectPage("/") or return RedirectPage("NewOrder/NewOrder") but none of them led to the correct solution此外,我尝试将它与其他组合一起使用,例如return RedirectPage("/")return RedirectPage("NewOrder/NewOrder")但它们都没有导致正确的解决方案
  • With return View("NewOrder") i am still directed to ".../NewOrder/CreateOrde" as well使用return View("NewOrder")我仍然被定向到 ".../NewOrder/CreateOrde"
  • I also tried the following: return Page() but this dependency/reference is unknown in asp.net core 2.0.我还尝试了以下方法: return Page()但在 asp.net core 2.0 中此依赖项/引用是未知的。
  • Furthermore i tried to solve my issue with setting the "asp-route-returnurl" attribute in my html form tag, but no success with it.此外,我尝试通过在我的 html 表单标签中设置“asp-route-returnurl”属性来解决我的问题,但没有成功。

Well, I think that maybe my issue has something to do with my routing.好吧,我认为我的问题可能与我的路由有关。 I use the following routing-setting in my Startup.cs:我在 Startup.cs 中使用以下路由设置:

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Map}/{action=Index}/{id?}");
    });

Last but not least I tried to use annotation routing, but it could also not solve my issue:最后但并非最不重要的一点是,我尝试使用注释路由,但它也无法解决我的问题:

    [Route("[controller]/NewOrder")]
    [HttpPost]
    public IActionResult CreateNewOrder(NewOrderViewModel newOrder)
    {
        _newOrderSaverRequestHandler.Handle(newOrder, ModelState);

        return RedirectToPage("NewOrder");
    }

So what I want is that after clicking the submit button, create a new order (which is handled by INewOrderSaverRequestHandler ) then stay on the same page.所以我想要的是在单击提交按钮后,创建一个新订单(由INewOrderSaverRequestHandler处理)然后留在同一页面上。 What do you think, where the problem lies in my code?您怎么看,问题出在我的代码中? Thanks in advance!提前致谢!

please replace this请更换这个

 <form asp-controller="NewOrder" asp-action="CreateOrder" class="well">

with

   <form asp-controller="NewOrder" asp-action="NewOrder" class="well">

you are using asp-action="CreateOrder" thats why it is going to CreateOrder method您正在使用 asp-action="CreateOrder" 这就是为什么要使用 CreateOrder 方法

try this return RedirectToAction("ActionMethod", "Controller");试试这个return RedirectToAction("ActionMethod", "Controller");

如果应用程序在 dot net core 中,请检查 Pages 文件夹中的文件

[HttpPost]
public IActionResult CreateNewOrder(NewOrderViewModel newOrder)
{
    _newOrderSaverRequestHandler.Handle(newOrder, ModelState);

    return RedirectToAction("NewOrder", "NewOrder");;
}

Use RedirectToAction("ActionMethod", "Controller");使用RedirectToAction("ActionMethod", "Controller"); instead RedirectToPage("yourPageName");而是RedirectToPage("yourPageName");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 提交表单后在 ASP.NET MVC 中。 它不会重定向到其他页面。 它正在加载相同的页面 - In ASP.NET MVC after submitting form. it is not redirecting to other page. its loading same page ASP.NET在提交表单后获取空白页面(初学者) - ASP.NET Getting a blank page after submitting a form (beginner) 为什么我的 HttpPost 方法没有从我的 Asp.Net Core Razor 页面触发? - Why is my HttpPost method not firing from my Asp.Net Core Razor page? ASP.NET Core Webb API 中的多个 HttpPost 方法 - Multiple HttpPost Method in ASP.NET Core Webb API 在 Asp.net 核心 mvc 中登录后重定向到同一页面 - Redirect to same page after Login in Asp.net core mvc 基于提交表单[ASP.NET Core]中的multiselect中的输入,多次调用控制器方法 - Call controller method multiple times based on input in multiselect from view on submitting form [ASP.NET Core] 在 Asp.net core Mvc 中提交表单后,下拉列表未保留所选值 - Dropdown list is not retaining the selected value after submitting the form in Asp.net core Mvc 使用 Javascript 在 ASP.NET 核心中提交表单后生成 reCAPTCHA v3 令牌 - reCAPTCHA v3 token generation after submitting form in ASP.NET Core using Javascript 提交带有结果数据的表单后如何将返回的数据绑定到 Telerik ASP.Net Core 网格 - How to bind returned data to a Telerik ASP.Net Core grid after submitting a form with resulted data 在 ASP.NET Core 中提交表单后如何保持 SelectListItem 值被选中? - How to keep SelectListItem value selected after submitting form in ASP.NET Core?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM