0

我有一个 PageMethod 和一个对该方法的 AJAX 调用,该方法传递了一系列产品 SKU 和请求的 SKU 的数量。它在 DEV(IIS7) 中运行良好,但在 PROD(IIS6) 中返回 500 错误:

Message: Object reference not set to an instance of an object. 
StackTrace: at ViewProduct.GetInventory(List`1 orderedSkus)
ExceptionType: System.NullReferenceException

这是相关的代码。如果您需要我的 web.config 中的特定片段,我也可以获取这些片段,尽管我没有看到任何对任何东西有任何影响的东西。

我尝试在 PageMethod 中使用两个不同的对象定义,orderedSkus As Object() 和 orderedSkus As List(Of Object)。相同的差异,但也相同的结果...空引用。

阿贾克斯:

    var editedSkus = [];
    function checkInventory() {
        editedSkus.length = 0;
        var textBoxes = $('input:text', '.table-orderMatrix');
        if (formEdited(textBoxes)) {
            var DTO = { 'orderedSkus': editedSkus };
            $.ajax({
                type: "POST",
                url: BasePath + "ViewProduct.aspx/GetInventory",
                data: JSON.stringify(DTO), 
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                success: function (msg) {
                    var skus = msg.d;
                    $.each(skus, function () {
                        //do stuff
                    });
                }
            });
        } else {
            // Do other stuff
        }
    }

    var formEdited = function (textBoxes) {
        var edited = 0;
        $.each(textBoxes, function (i) {
            if (this.value > 0) {
                var sku = {};
                sku.skuNumber = $(this).prev().val();
                sku.orderAmount = this.value;
                editedSkus.push(sku);
                edited += 1;
            }
        });
        return edited;
    }

页面方法:

    <WebMethod()> _
Public Shared Function GetInventory(orderedSkus As List(Of Object)) As List(Of Object)
    Dim _skus As SKUCollection
    Dim _sku As SKU = Nothing
    Dim warnings As New List(Of Object)
    Dim qty As Integer
    _skus = CurrentStyle.SKUs

    For Each _orderedSku As Object In orderedSkus
        Dim dicValues As New Dictionary(Of String, Object)()
        dicValues = DirectCast(_orderedSku, Dictionary(Of String, Object))
        Dim orderedSkuNumber As String = dicValues("skuNumber").ToString()
        Dim orderAmount As String = CType(dicValues("orderAmount"), Integer)

        Try
            'Stuff
        Catch ex As Exception
            'Health Monitoring
        End Try
    Next

    Return warnings

End Function

编辑:添加我们的 DEV 服务器正在运行 IIS7(pagemethod 工作的地方)的“次要细节”,而 PROD 仍在 IIS6 下(它不工作)。我知道...不要让我开始。添加这个是因为我觉得它可能对这种情况具有重要意义。

4

1 回答 1

1

我想到了。该对象被很好地传递。但是,PROD 中的 Try...Catch 中的一些代码在 DEV 中运行良好(这与 AJAX 调用完全无关)。反过来,我没有提供适当的错误消息(即使在 Catch 中添加了一些错误处理之后),而是收到了我发送的对象为空的错误。奇怪,但你去。

于 2012-11-01T17:55:07.833 回答