[英]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 找到的解决方案:
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 solutionreturn RedirectPage("/")
或return RedirectPage("NewOrder/NewOrder")
但它们都没有导致正确的解决方案return View("NewOrder")
i am still directed to ".../NewOrder/CreateOrde" as wellreturn View("NewOrder")
我仍然被定向到 ".../NewOrder/CreateOrde"return Page()
but this dependency/reference is unknown in asp.net core 2.0.return Page()
但在 asp.net core 2.0 中此依赖项/引用是未知的。 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.