【问题标题】:Problem invoking widget's action method in NopCommerce在 NopCommerce 中调用小部件的操作方法时出现问题
【发布时间】:2021-08-11 21:44:31
【问题描述】:

我正在尝试在 NopCommerce 4.3 中开发一个小部件。我需要使用 Ajax 将小部件公共视图中的数据发布到控制器的 Action 方法。问题是当从视图进行调用时,调用的是产品页面而不是我的小部件视图。这是 VS 的输出:

Microsoft.AspNetCore.Hosting.Diagnostics: Information: Request starting HTTP/2.0 POST https://localhost:44331/aliento-de-ogro application/x-www-form-urlencoded 292298. Excepción producida: 'System.ArgumentException' en System.Private.CoreLib.dll. Microsoft.AspNetCore.Routing.EndpointMiddleware: Information: Executing endpoint 'Nop.Web.Controllers.ProductController.ProductDetails (Nop.Web)' Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker: Information: Route matched with {action = "ProductDetails", controller = "Product", area = ""}. Executing controller action with signature Microsoft.AspNetCore.Mvc.IActionResult ProductDetails(Int32, Int32) on controller Nop.Web.Controllers.ProductController (Nop.Web). Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor: Information: Executing ViewResult, running view ProductTemplate.Simple. Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor: Information: Executed ViewResult - view ProductTemplate.Simple executed in 411.9849ms.

小部件的视图如下所示:

<form id="AjaxForm" method="post">
    <input type="hidden" id="productId" value=@ViewBag.sku />                                
    <input type="hidden" id="input_elem" name="image" />                                
    <div class="col-md-9">                                    
        <div id="ErrorAlert" class="alert alert-danger" style="display:none" role="alert">
            Error en los datos enviados!                                    
        </div>                                    
        <div id="ExitoAlert" class="alert alert-success" style="display:none" role="alert">                                        
            Datos recibidos correctamente!                                    
        </div>
    </div>  
    <button class="btn btn-success" id="SubmitBtn" type="submit">Save photo</button>
</form>

$.ajax({
            type: "post",  // Verbo HTTP
            url: "@Url.Action("TakePhoto", "Photo")",
            dataType: "application/json",
            headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken: "]').val() },
            data: JSON.stringify(
                {
                    // Datos / Parámetros
                    ProductId: $("#productId").val(),
                    Role: role, //$("#role").val(),
                    ExpressionName: expressionName, //$("#expressionName").val(),
                    Photo: $("#photo").attr('src') 
                    }),
                contentType: "application/json; charset=utf-8"
            })               
            .done(function (result) {                    
                    alert(result.Message);
                }
            })                
            .fail(function (xhr, status, error) { 
            })               
            .always(function () {
            });
        return false;
        });

Asp.net 后端正在接收“application/x-www-form-urlencoded”而不是“application/json”。为什么?这是因为我的小部件的控制器没有到达的原因吗?为什么会调用 Nop.Web.Controllers.ProductController.ProductDetails (Nop.Web)'?

【问题讨论】:

    标签: nopcommerce


    【解决方案1】:

    您似乎没有收到来自 Ajax 调用的请求。相反,您正在从页面中的某个表单接收请求。

    这似乎很清楚,因为您从不同的端点接收到具有不同内容类型的请求。由于您的表单中似乎有图像,因此多部分请求在这种情况下是合乎逻辑的。

    我的建议是:

    • 检查您的页面并在其中查找多部分表单。一些问题处理事件可能会触发该表单而不是您的代码。有嵌套表格吗?

    • 在 Chrome 中启用请求历史记录和保留日志选项。获取请求的逐字副本。检查网址。

    • 在 .NET 中,检索收到的请求的逐字副本。检查网址。

    • 在你的 Javascript 代码中设置一个断点,看看它是否被调用。

    我想这会对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-19
      • 2015-09-10
      • 2021-05-28
      • 1970-01-01
      相关资源
      最近更新 更多