gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:25:12 24 4
gpt4 key购买 nike

我正在使用 ASP.NET Core 2.0 开发 Web 应用程序。
首先,我有一个名为 NewOrder.cshtml 的主 View :

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

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

@Html.Partial("_NewOrder")

在这个主 View 中,我在局部 View (_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>

当然,我有相应的 Controller 和 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");
}
}

问题是,如果我单击提交按钮,页面将重定向到以下 URL:“ 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 处理)然后留在同一页面上。你怎么看,问题出在我的代码中?提前致谢!

    最佳答案

    请更换这个

     <form asp-controller="NewOrder" asp-action="CreateOrder" class="well">
       <form asp-controller="NewOrder" asp-action="NewOrder" class="well">
    您正在使用 asp-action="CreateOrder"这就是为什么要使用 CreateOrder 方法
    试试这个 return RedirectToAction("ActionMethod", "Controller");

    关于c# - 使用 HttpPost 方法提交表单后 ASP.NET Core 重定向到同一页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47173698/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com