[英]Jquery and ASP.NET ajax call to .NET is giving 500 error
I created an object like so: 我创建了一个像这样的对象:
Object {ABC-123: "XYZ", ABC-112: "LAX"}
and I am trying to send that object to .NET, but I am getting a 500 error, here is how I am sending this object: 并且我试图将该对象发送到.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');
}
});
the variable editObject is the object above. 变量editObject是上面的对象。 I don't think this part is the problem.
我认为这不是问题。
I am sending it to this controller in ASP.NET: 我将其发送到ASP.NET中的此控制器:
public List<VendorUpdateClass> updateVendorItem(string[] edittedItems)
{
ConnectionClass jobs = new ConnectionClass();
return jobs.updateVendors(edittedItems);
}
and then sending it this class: 然后发送该类:
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;
}
Now here is something interesting when I remove the loop from my class so it looks like so: 现在,当我从类中删除循环时,这是有趣的事情,看起来像这样:
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;
}
this does not give me a 500 error, in fact I get the success alert from the ajax call. 这不会给我500错误,实际上我从ajax调用中获得了成功警报。 So I am assuming I am doing something wrong to loop through my object in .NET Does anyone have any suggestions ?
因此,我假设我在循环遍历.NET中的对象时做错了什么?有人有任何建议吗?
What I am expecting is vendorUpdatedItem.job
equals ABC-123, vendorUpdatedItem.task
equals ABC-123 and vendorUpdatedItem.vendor
equals XYZ (for the first item anyways) 我期望的是
vendorUpdatedItem.job
等于ABC-123, vendorUpdatedItem.task
等于ABC-123, vendorUpdatedItem.vendor
等于XYZ(无论如何对于第一个项目)
There is another problem...I can't debug my .NET code as my IIS is not working. 还有另一个问题...由于IIS无法正常工作,我无法调试.NET代码。
but here is the response I get from my network calls: 但是这是我从网络呼叫中得到的响应:
{"Message":"An error has occurred.","ExceptionMessage":"Object reference not set to an instance of an object.","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 at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary2 arguments, CancellationToken cancellationToken)\\r\\n--- End of stack trace from previous location where exception was thrown ---\\r\\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\\r\\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\\r\\n at System.Runtime.CompilerServices.TaskAwaiter1.GetResult()\\r\\n at System.Web.Http.Controllers.ApiControllerA
{“ Message”:“发生错误。”,“ ExceptionMessage”:“对象引用未设置为对象的实例。”,“ ExceptionType”:“ System.NullReferenceException”,“ StackTrace”:“在VendorProject.Models .ConnectionClass.updateVendors(String []项目)\\ r \\ n位于lambda_method(Closure,Object,Object [])\\ r \\ n位于System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor。<> c__DisplayClass10.b__9(对象实例,位于System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext,IDictionary2自变量,CancellationToken cancelToken)处的Object [] methodParameters)\\ r \\ n \\ r \\ n ---从上一个引发异常的位置开始的堆栈跟踪结束--- \\ r \\ n在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\\ r \\ n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\\ r \\ n在System.Runtime.CompilerServices。 System.Web.Http.Controllers.ApiControllerA上的TaskAwaiter1.GetResult()\\ r \\ n ctionInvoker.d__0.MoveNext()\\r\\n--- End of stack trace from previous location where exception was thrown ---\\r\\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\\r\\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\\r\\n at System.Runtime.CompilerServices.TaskAwaiter1.GetResult()\\r\\n at System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext()\\r\\n--- End of stack trace from previous location where exception was thrown ---\\r\\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\\r\\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\\r\\n at System.Runtime.CompilerServices.TaskAwaiter1.GetResult()\\r\\n at System.Web.Http.Controllers.AuthenticationFilterResult.d__0.MoveNext()\\r\\n--- End of stack trace from previous location where exception was thrown ---\\r\\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\\r\\n at S
ctionInvoker.d__0.MoveNext()\\ r \\ n ---在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)处从上一个引发异常的位置开始的堆栈跟踪--- \\ r \\ n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)在System.Runtime.CompilerServices.TaskAwaiter1.GetResult()\\ r \\ n在System.Web.Http.Controllers.ActionFilterResult.d__2.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.AuthenticationFilterResult.d__0.MoveNext()\\ r \\ n ---在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\\ r \\ n处引发异常的先前位置的堆栈结束跟踪--- \\ r \\ n ystem.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\\r\\n at System.Runtime.CompilerServices.TaskAwaiter1.GetResult()\\r\\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()"}
ystem.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\\ r \\ n在System.Runtime.CompilerServices.TaskAwaiter1.GetResult()\\ r \\ n在System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext() }
Your Javascript object should look something like this: 您的Javascript对象应如下所示:
var vendorUpdatLists= [ { job: "ABC-123", task: "XYZ" }, { job: "ABC-333", task: "LAX" }];
And your method definition should look like: 而且您的方法定义应如下所示:
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
}
}
Lastly, I recommend that you follow the proper naming conventions. 最后,我建议您遵循正确的命名约定。 For example, a public property should start with a capital letter.
例如,公共财产应以大写字母开头。
string job = vendorUpdateItem.Job;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.