Jquery和ASP.NET ajax对.NET的调用给出了500错误

时间:2015-05-27 13:31:05

标签: c# jquery asp.net ajax

我创建了一个像这样的对象:

Object {ABC-123: "XYZ", ABC-112: "LAX"}

我试图将该对象发送到.NET,但我收到500错误,这是我发送此对象的方式:

 $.ajax({
            type: "POST",
            url: "/vendorProject/api/connection/updateVendorItem",
            data: JSON.stringify(editObject),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                alert('success');
            },
            failure: function (errMsg) {
                alert('failed');
            }
        });

变量editObject是上面的对象。我不认为这部分是问题。

我将它发送到ASP.NET中的这个控制器:

public List<VendorUpdateClass> updateVendorItem(string[] edittedItems)
        {
            ConnectionClass jobs = new ConnectionClass();
            return jobs.updateVendors(edittedItems);
        }

然后发送这个类:

public List<VendorUpdateClass> updateVendors(string[] items)
        {
            VendorUpdateCell = new List<VendorUpdateClass>();

            VendorUpdateClass vendorUpdatedItem = new VendorUpdateClass();

            for (int i = 0; i < items.Length; i++ ){
                vendorUpdatedItem.job = items[i];
                vendorUpdatedItem.task = items[i];
                vendorUpdatedItem.vendor = items[i];

                VendorUpdateCell.Add(vendorUpdatedItem);
            }

            return VendorUpdateCell;
        }

现在这里有一些有趣的东西,当我从我的类中删除循环,所以它看起来像这样:

public List<VendorUpdateClass> updateVendors(string[] items)
        {
            VendorUpdateCell = new List<VendorUpdateClass>();

            VendorUpdateClass vendorUpdatedItem = new VendorUpdateClass();

            //for (int i = 0; i < items.Length; i++ ){
                vendorUpdatedItem.job = "aaa";
                vendorUpdatedItem.task = "bbb";
                vendorUpdatedItem.vendor = "ccc";

                VendorUpdateCell.Add(vendorUpdatedItem);
            //}

            return VendorUpdateCell;
        }

这不会给我500错误,事实上我从ajax调用得到了成功警报。所以我假设我做错了在.NET中遍历我的对象有没有人有任何建议?

我期待的是vendorUpdatedItem.job等于ABC-123,vendorUpdatedItem.task等于ABC-123,vendorUpdatedItem.vendor等于XYZ(无论如何都是第一项)

还有另一个问题......我无法调试我的.NET代码,因为我的IIS无法运行。

但这是我从网络电话中得到的回复:

  

{“Message”:“发生错误。”,“ExceptionMessage”:“对象引用未设置为对象的实例。”,“ExceptionType”:“System.NullReferenceException”,“StackTrace”:“at VendorProject.Models.ConnectionClass.updateVendors(字符串[]项个)\ r \ n在lambda_method(封闭,对象,对象[])\ r \ n在System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor&LT;&GT; c__DisplayClass10 .b__9(对象实例,Object [] methodParameters)\ r \ n在System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext,IDictionary2参数,CancellationToken cancellationToken)\ r \ n ---来自之前的堆栈跟踪结束抛出异常的位置--- \ r \ n在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\ r \ n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\ r \ n在系统中System.Web.Http.C上的.Runtime.CompilerServices.TaskAwaiter1.GetResult()\ r \ n ontrollers.ApiControllerActionInvoker.d__0.MoveNext()\ r \ n ---从抛出异常的上一个位置开始的堆栈跟踪结束--- \ r \ n在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\ r \ n \ n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务个)\ r \ n在System.Runtime.CompilerServices.TaskAwaiter1.GetResult(个)\ r \ n在System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext ()\ r \ n ---从抛出异常的上一个位置开始的堆栈跟踪结束---在System.Runtime的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\ r \ n中的\ r \ n。 CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务个)\ r \ n在System.Runtime.CompilerServices.TaskAwaiter1.GetResult(个)\ r \ n在System.Web.Http.Controllers.AuthenticationFilterResult.d__0.MoveNext(个)\ r \正 - 从抛出异常的先前位置开始的堆栈跟踪结束--- \ r \ n在System.Runtime.CompilerServices.TaskAwa iter.ThrowForNonSuccess(任务任务)\ r \ n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\ r \ n在System.Runtime.CompilerServices.TaskAwaiter1.GetResult(个)\ r \ n在System.Web程序。 Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()“}

1 个答案:

答案 0 :(得分:3)

您的Javascript对象应如下所示:

var vendorUpdatLists= [ { job: "ABC-123", task: "XYZ" },  { job: "ABC-333", task: "LAX" }];

您的方法定义应如下所示:

public List<VendorUpdateClass> updateVendors(List<VendorUpdateClass> vendorUpdateItems) {
  // It's time to use the list!
  if (vendorUpdateItems != null && vendorUpdateItems.Count() > 0) {
    string job = vendorUpdateItems[0].job; // ABC-123
    string task = vendorUpdateItems[0].task; // XYZ
  }
}

最后,我建议您遵循正确的命名约定。例如,公共财产应以大写字母开头。

string job = vendorUpdateItem.Job;