【发布时间】:2017-11-08 07:16:18
【问题描述】:
我正在使用 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");
}
}
问题是,如果我单击提交按钮,页面将重定向到以下网址:“http://localhost:13078/NewOrder/CreateOrder”。但我想留在同一页面上,所以在“http://localhost:13078/NewOrder/NewOrder”网址
我已经尝试了一些我在 stackoverflow 找到的解决方案:
- 使用
return RedirectPage("NewOrder")- 我仍然被重定向到 .../NewOrder/CreateOrder 所以到 404 错误页面。此外,我尝试将它与return RedirectPage("/")或return RedirectPage("NewOrder/NewOrder")等其他组合一起使用,但它们都没有导致正确的解决方案 -
return View("NewOrder")我仍然被定向到“.../NewOrder/CreateOrde” - 我还尝试了以下方法:
return Page()但此依赖项/引用在 asp.net core 2.0 中是未知的。 - 此外,我尝试通过在我的 html 表单标签中设置“asp-route-returnurl”属性来解决我的问题,但没有成功。
好吧,我认为我的问题可能与我的路由有关。我在 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 处理)然后留在同一页面上。您怎么看,问题出在我的代码中?提前致谢!
【问题讨论】:
标签: c# asp.net .net asp.net-mvc razor