2017-09-05 1 views
1

J'ai un appel ajax et j'ai besoin d'obtenir la liste des données en JSON depuis mon contrôleur. Je continue à obtenir cette exception.Une exception a été levée par la cible d'une invocation MVC

Ci-dessous est mon appel ajax:

$('#button1').click(function (e) { 
e.preventDefault(); 
var id= $("#textboxvalue").val(); 
debugger; 
var url = "@Url.Action("GetList", "xyz")"; 
console.log(url); 
$.ajax({ 
    url: url, 
    type: "GET", 
    async: false, 
    data: { id: id}, 
    dataType: "json", 
    traditional: true, 
    contentType: "application/json; charset=utf-8", 
    success: function (data) { 
     debugger; 
     for (var i in data) {  
     } 
    }, 
    error: function (xhr, ajaxOptions, thrownError) { 
     //Always goes to error function 
     alert("An error has occured!!!"); 
    } 
}); 
}); 

Code Controller:

Je peux obtenir la valeur du paramètre de la ajax et d'obtenir toutes les valeurs de db.

[HttpGet] 
    public ActionResult GetList(string id) 
    { 

     var pList = new List<Property>(); 
     using (var db = new LiensTrackerEntities()) 
     { 

      var recipient = db.Recipients.FirstOrDefault(x => x.id== id); 
      //Need to make sure there is an Properties object 
      if (recipient != null && 
recipient.RecipientPropertyCollections.Count() != 0) 
      { 
       List<int> properties = 
recipient.RecipientPropertyCollections.Select(p => p.Property_ID).ToList(); 

       foreach (var item in properties) 
       { 
        Property p1 = db.Properties.FirstOrDefault(u => 
u.PropertyID == item); 
        pList.Add(p1); 
       } 
// I can see the values in pList on continue it goes to ERROR function in 
Ajax with 500 error 
       return Json(pList, JsonRequestBehavior.AllowGet); 
      } 
     } 
     return Json(" No spouse info in Medicaid", 
JsonRequestBehavior.AllowGet); 
    } 

Exception Message:

Exception a été levée par la cible d'un appel.

Exception Trace de la pile:

at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] 
arguments, Signature sig, Boolean constructor) 
    at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, 
Object[] parameters, Object[] arguments) 
    at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags 
invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) 
    at System.Web.SecurityUtils.MethodInfoInvoke(MethodInfo method, Object target, Object[] args) 
    at System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat) 
    at System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember) 
    at System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember) 
    at System.Web.Script.Serialization.JavaScriptSerializer.SerializeEnumerable(IEnumerable enumerable, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat) 
    at System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember) 
    at System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember) 
    at System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat) 
    at System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember) 
    at System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember) 
    at System.Web.Script.Serialization.JavaScriptSerializer.SerializeEnumerable(IEnumerable enumerable, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat) 
    at System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember) 
    at System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat, MemberInfo currentMember) 
    at System.Web.Script.Serialization.JavaScriptSerializer.Serialize(Object obj, StringBuilder output, SerializationFormat serializationFormat) 
    at System.Web.Script.Serialization.JavaScriptSerializer.Serialize(Object obj, SerializationFormat serializationFormat) 
    at System.Web.Script.Serialization.JavaScriptSerializer.Serialize(Object obj) 
    at System.Web.Mvc.JsonResult.ExecuteResult(ControllerContext context) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) 
+1

Au lieu de simplement 'StackTrace' sur l'exception, pouvez-vous fournir le résultat de l'appel de sa méthode' ToString() '? – StriplingWarrior

+1

Pourriez-vous publier la classe 'Property'? –

+0

Votre exception a probablement une exception interne, vérifiez cela pour plus de détails. –

Répondre

0

Basé sur la trace de la pile, il semble que l'erreur se produit lorsque MVC tente de JSON-sérialiser la valeur retournée. Comme cette valeur est List<Property>, il est probable que la classe Property comporte un membre qui émet des exceptions lorsqu'il est invoqué dans certaines circonstances. Envisagez de créer une classe d'objets de transfert de données distincte à renvoyer à la place de la classe de modèle que vous utilisez. Ou, vérifiez la classe de modèle Entity pour voir pourquoi l'invocation de ses propriétés peut générer une exception.

Comme une note de côté, si votre modèle d'entité est configuré correctement, vous devriez être en mesure de simplifier la logique de votre requête un peu:

using (var db = new LiensTrackerEntities()) 
    { 
     var pList = db.Properties 
      .Where(p => p.RecipientPropertiesCollection 
       .Any(rp => rp.RecipientId == id)) 
      .ToList(); 
     return Json(pList, JsonRequestBehavior.AllowGet); 
    } 

Cela complétera dans une base de données unique aller-retour, alors que Votre code actuel fait plusieurs allers-retours.