我正在使用ASP.NET Core 2.0开发Web应用程序。 首先,我有一个名为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")
在这个主视图中,我在局部视图中使用了一个表单(_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>
当然我有相应的控制器和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");
}
}
问题是,如果我点击提交按钮,页面会被重定向到以下网址:&#34; http://localhost:13078/NewOrder/CreateOrder&#34;。但我想要的是保持同一页面,所以在&#34; http://localhost:13078/NewOrder/NewOrder&#34; URL
我已经尝试了一些我在stackoverflow找到的解决方案:
return RedirectPage("NewOrder")
- 我仍然被重定向到... / NewOrder / CreateOrder,因此到404错误页面。此外,我尝试将其与return RedirectPage("/")
或return RedirectPage("NewOrder/NewOrder")
等其他组合使用,但没有一个能够找到正确的解决方案return View("NewOrder")
我仍然被定向到&#34; ... / NewOrder / CreateOrde&#34;以及return Page()
但是这个依赖/引用在asp.net core 2.0中是未知的。好吧,我想我的问题可能与我的路由有关。我在Startup.cs中使用以下路由设置:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Map}/{action=Index}/{id?}");
});
最后但并非最不重要的是我尝试使用注释路由,但它也无法解决我的问题:
[Route("[controller]/NewOrder")]
[HttpPost]
public IActionResult CreateNewOrder(NewOrderViewModel newOrder)
{
_newOrderSaverRequestHandler.Handle(newOrder, ModelState);
return RedirectToPage("NewOrder");
}
所以我想要的是点击提交按钮后,创建一个新订单(由INewOrderSaverRequestHandler
处理)然后保持在同一页面上。您如何看待问题出在我的代码中?提前谢谢!
答案 0 :(得分:1)
请替换此
<form asp-controller="NewOrder" asp-action="CreateOrder" class="well">
与
<form asp-controller="NewOrder" asp-action="NewOrder" class="well">
你正在使用asp-action =“CreateOrder”这就是为什么它会转向CreateOrder方法