繁体   English   中英

ASP.NET 核心 MVC 数据库在重定向后未添加 object

[英]ASP.NET Core MVC database does not add an object after redirecting

我这里有两种情况。第一种发生在我路由到的页面存在时,另一种发生在页面不存在时。有点奇怪。

我尝试在 asp.net 核心中将 object 添加到我的数据库中,但是当我单击页面上的订购按钮时,它会将我重定向到应用程序的索引页面(没什么大不了的),但我的问题是 ZA8CFDE63311BD59EB26ZCF4我发送的 POST 请求没有添加到数据库中。

另一方面,如果页面不存在,则 object 会添加到数据库中(没问题),但我收到内部服务器错误,提示在用于搜索页面的文件夹中找不到“索引”。我的问题是我怎样才能仍然将 object 添加到我的数据库中,并且仍然路由到我想要路由到的页面(例如感谢您的购买页面)。

我现在将提供我使用的 controller 的代码和端点代码:

端点:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
});

Controller:

[Route("api/shopping")]
[ApiController]
public class SendItemsController : Controller
{
    private AppDbContext _db;
    
    public SendItemsController(AppDbContext db)
    {
        _db = db;
    }
    
    [HttpPost]
    [Consumes("application/json")]
    public async Task<IActionResult> Save([FromBody] ShoppingCart s)
    {
        await _db.ShoppingCarts.AddAsync(s);
        await _db.SaveChangesAsync();
        return RedirectToPage("Index");
    }
  
    public IActionResult Index()
    {
        return View();
    }
}
<form method="post" asp-controller="SendItems" asp-action="Save">



            <div class="form-group row">
                <div class="col-4">
                    <label id="clientName"></label>
                </div>
                <div class="col-6">
                    <input id="inputName" type="text" />
                </div>
            </div>

            <div class="form-group row">
                <div class="col-4">
                    <label id="clientAddress"></label>
                </div>
                <div class="col-6">
                    <input id="inputAddress" type="text" />
                </div>

            </div>

            <div class="form-group row">
                <div class="col-4">
                    <label id="clientMail"></label>
                </div>
                <div class="col-6">
                    <input id="inputMail" type="text" />
                </div>
            </div>

            <div class="form-group row">
                <div class="col-3 offset-4">
                    <button class="btn btn-primary " id="orderB">ORDER</button>
                </div>
            </div>
        </form>

这是我在购物车页面上使用的 javascript:

  var orderB = document.getElementById("orderB");
        orderB.addEventListener("click", function () {
            var inputName = document.getElementById("inputName").value;
            var inputAddress = document.getElementById("inputAddress").value;
            var inputMail = document.getElementById("inputMail").value;
            var auxArray = [];
            for (var i = 0; i < productsAux.length; i++) {
                if (productsAux[i]!="") {
                auxArray[i-1] = { "productName": productsAux[i].titlu, "productPrice": productsAux[i].pret, "quantity": localStorage.getItem(productsAux[i].titlu) };
                }
            }
            var shoppingCart = {
                productList: auxArray,
                clientName: inputName,
                clientAddress: inputAddress,
                clientMail: inputMail
            };
            
            $.ajax({
                type: "POST",
                data: JSON.stringify(shoppingCart),
                url: "api/Shopping",
                contentType: "application/json;charset=utf-8",
            })
        })

RedirectToPage用于 Razor Page,虽然这是一个 MVC 项目,但我认为您需要使用RedirectToAction

当我单击页面上的订单按钮时,它会将我重定向到应用程序的索引页面

那么,您想通过单击订单按钮来触发SendItemsController中的Save操作吗? 请求是什么样的,url 对吗? 也许您可以向我们展示客户端代码。

我做了一个简单的demo,用postman测试,大家可以参考一下。

[HttpPost]
[Consumes("application/json")]
public async Task<IActionResult> Save([FromBody] ShoppingCart s)
{
    await _db.ShoppingCarts.AddAsync(s);
    await _db.SaveChangesAsync();
    return RedirectToAction("Thanks");
}

[HttpGet("Thanks")]
public IActionResult Thanks()
{
    return View();
}

在此处输入图像描述

更新:

@section scripts{
    <script>
        var orderB = document.getElementById("orderB");
        orderB.addEventListener("click", function (e) {
            e.preventDefault();
            var inputName = document.getElementById("inputName").value;
            var inputAddress = document.getElementById("inputAddress").value;
            var inputMail = document.getElementById("inputMail").value;
            var auxArray = [];
            for (var i = 0; i < productsAux.length; i++) {
                if (productsAux[i] != "") {
                    auxArray[i - 1] = { "productName": productsAux[i].titlu, "productPrice": productsAux[i].pret, "quantity": localStorage.getItem(productsAux[i].titlu) };
                }
            }
            var shoppingCart = {
                productList: auxArray,
                clientName: inputName,
                clientAddress: inputAddress,
                clientMail: inputMail
            };

            $.ajax({
                type: "POST",
                url: "/api/Shopping",
                contentType: "application/json;charset=utf-8",
                data: JSON.stringify(shoppingCart),

            })
        })
    </script>
}

暂无
暂无

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM