【问题标题】:Jquery and ASP.NET ajax call to .NET is giving 500 error对 .NET 的 Jquery 和 ASP.NET ajax 调用给出 500 错误
【发布时间】:2015-05-27 13:31:05
【问题描述】:

我这样创建了一个对象:

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(String[] items)\r\n at lambda_method(Closure , Object , Object[] )\r\n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.c__DisplayClass10.b__9 (Object instance, Object[] methodParameters)\r\n 在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary2 arguments, CancellationToken cancelToken)\r\n--- 堆栈跟踪从上一个位置结束,其中在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)处引发了异常 ---\r\n\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)处\r\n 在 System.Runtime .CompilerServices.TaskAwaiter1.GetResult()\r\n 在 System.Web.Http.Control lers.ApiControllerActionInvoker.d__0.MoveNext()\r\n--- 从先前引发异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\r \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.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n 在 System.Runtime 处从先前引发异常的位置结束堆栈跟踪。 CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter1.GetResult()\r\n 在 System.Web.Http.Controllers.AuthenticationFilterResult.d__0.MoveNext()\r\n- -- 从先前引发异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.T hrowForNonSuccess(任务任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter1.GetResult()\r\n 在 System.Web.Http。 Dispatcher.HttpControllerDispatcher.d__1.MoveNext()"}

【问题讨论】:

  • 在您的失败部分添加以下代码并尝试找出确切的错误消息: .failure(function (xhr, textStatus, errorThrown) { //errorThrown 中返回什么?});
  • 虽然我不一定期望它会导致 错误,但您的初始循环代码正在更新同一个对象并在每个数组中放置对同一个对象的引用元素。在这种结构中,您确实需要为每次迭代创建一个“新的”VendorUpdateClass。

标签: c# jquery asp.net ajax


【解决方案1】:

您的 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;

【讨论】:

  • 好的,我试过了,现在我的循环出现错误for (int i = 0; i &lt; items.Length; i++ ){ vendorUpdatedItem.job = items[i]; vendorUpdatedItem.task = items[i]; vendorUpdatedItem.vendor = items[i]; VendorUpdateCell.Add(vendorUpdatedItem); }
  • Error 2 'System.Collections.Generic.List&lt;VendorProject.Models.VendorUpdateClass&gt;' does not contain a definition for 'Length' and no extension method 'Length' accepting a first argument of type 'System.Collections.Generic.List&lt;VendorProject.Models.VendorUpdateClass&gt;' could be found (are you missing a using directive or an assembly reference?) 和 Error 3 Cannot implicitly convert type 'VendorProject.Models.VendorUpdateClass' to 'string'
  • 我将循环更改为:foreach (object objectItems in items) { VendorUpdateClass vendorUpdatedItem = new VendorUpdateClass(); vendorUpdatedItem.job = objectItems.job; vendorUpdatedItem.task = "bbb"; vendorUpdatedItem.vendor = "ccc"; VendorUpdateCell.Add(vendorUpdatedItem); } 如何从列表中获取项目?我试过vendorUpdatedItem.job = objectItems.job;,但它给了我一个错误
  • 错误 2 'object' 不包含 'job' 的定义,并且找不到接受类型为 'object' 的第一个参数的扩展方法 'job'(您是否缺少 using 指令或程序集参考?)\\psf\home\documents\visual studio 2013\projects\vendorproject\vendorproject\models\connectionclass.cs 201 53 VendorProject
  • 方法参数“vendorUpdateItems”应该已经包含从 javascript 代码传递的两个对象。您所要做的就是在您的方法中使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
相关资源
最近更新 更多