代码之家  ›  专栏  ›  技术社区  ›  loremIpsum1771

按钮单击时未调用控制器操作

  •  0
  • loremIpsum1771  · 技术社区  · 6 年前

    我有一个ASP.Net核心MVC 2.0应用程序,其中我为一个电子商务网站实现了一个购物车,如前所述 in this video series . 在应用程序中,用户可以为表中显示的项目输入搜索查询。表中的每个项目都可以单击以显示另一个页面,其中包含该项目的其他详细信息以及“添加到购物车”按钮。

    用于搜索、显示项目结果和详细信息页面的站点功能都是作为一个控制器类中的操作实现的,而购物车功能都是在一个单独的控制器类中实现的。

    出于某种原因,当我单击项目的“添加到购物车”按钮时,表单的url http://<hostname>/<controllerName>/<controllerACtion>/<id> 已请求,但未调用相应的控制器操作。这很奇怪,因为我使用了与显示详细信息基本相同的代码来调用添加到购物车的操作。因此,我认为这个问题与路线的设置有关。

    以下是startup.cs中的路由设置:

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=resortDeals}/{action=Index}/{id?}");
        routes.MapRoute(
            name: "shoppingcart",
            template: "{controller=ShoppingCartController}/{action=AddToShopingCart}/{id?}");
    });
    

    public class ShoppingCartController : Controller
    {
        public ViewResult Index()
        {
            ...
        }
    
        public RedirectToActionResult AddToShopingCart(int dealId)
        {
            ...
        }
    }
    

    下面是单击“添加到购物车”按钮后如何调用操作的代码:

    <div class="addToCart text-right">
        <p class="button ">
            <a class="btn btn-success" id="cartButton" asp-controller="ShoppingCartController" asp-action="AddToShoppingCart" asp-route-id="@Model.RecNo">
                Add to cart
            </a>
        </p>
    </div>
    

    单击按钮后,有什么可能阻止调用控制器操作?

    2 回复  |  直到 6 年前
        1
  •  0
  •   Steve Tolba    6 年前

    在生产服务器上发布之后,我遇到了一个问题,当单击按钮时没有响应,我不得不使用Javascript提交按钮。

    <div class="addToCart text-right">
      <p class="button ">
        <button class="btn btn-success"  onclick="search(@Model.RecNo)">
            Add to cart
        </button>
      </p>
    </div>
    
    <script>
            function addToCart(recNo) {
                document.getElementById('cartForm').action = "/ShoppingCart/AddToShoppingCart/" + recNo;
                document.getElementById('cartForm').submit();
            }
    </script>
    
        2
  •  0
  •   Mohsin Mehmood    6 年前

    template: "{controller=ShoppingCartController}/{action=AddToShopingCart}/{id?}");

    还有,试试看

    <a class="btn btn-success" id="cartButton" asp-controller="ShoppingCart" asp-action="AddToShoppingCart" asp-route-id="@Model.RecNo">
    

    我已经移除了 Controller 文字来源 asp-controller

    另外,将AddToShopingCart方法的输入参数名更改为 id 而不是 dealId

    public RedirectToActionResult AddToShopingCart(int id)
        {
            ...
        }