2016-10-21 2 views
0

Ich habe diese Aktion auf einem Artikel Controller Mvc 4 JsonResult nichts Rückkehr

[HttpGet] 
public JsonResult Search(string data, int id) 
{ 
    var date = DateTime.Now; 
    if(!string.IsNullOrEmpty(data)) 
     date = DateTime.Parse(data); 
    var result = Repository.FindBy(date, id); // (1) 
    return Json(result, JsonRequestBehavior.AllowGet); 
} 

und ich rufe es mit jQuery

function successHandler(success){ 
    console.log(success); // (2) 
    return success; 
} 

function errorHandler(error){ 
    console.error(error); // (3) 
    return error; 
} 

$.ajax({ 
    type: 'GET', 
    contentType: 'application/json', 
    url: '/Items/Date/2015-01-01/Id/2', 
}).then(successHandler, errorHandler); 

Wenn ich in einen Haltepunkt setzen (1) und starten Sie den jQuery Ajax Aufruf der Debugger trifft den Haltepunkt, ich kann sehen, dass result ist eine gültige IEnumerable<Item> und dass die Aktion zurückgibt.

Wenn ich einen Haltepunkt in (2) es nie getroffen hat, und in (3) der Wert von error ist

{ readyState: 4, 
    responseText: "", 
    status: 200, 
    statusText: "OK" } 

Welche kein Fehler ist.

Wenn ich direkt die URL (http://localhost:26252/Items/Search/2015-01-01/Id/2) aufrufen, bekomme ich eine leere Seite und mit der Firebug-Konsole die gleiche Antwort.

Was ist los?

EDIT:

die individuelle Route für diese Aktion ist

routes.MapRoute(
    name: "Items", 
    url: "Items/Date/{date}/Id/{id}", 
    defaults: new { controller = "Items", action = "Search" } 
); 

und der Standard ist

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 
+0

Seite Frage: welche Art von Javascript ist das? Sind die Klammern einfach verschwunden oder ist das ein Parser? – Nsevens

+0

es ist Kaffeescript. möchten Sie, dass ich die kompilierte Version einfüge? – fra9001

+0

ja. Bitte poste die generierte js. Verfügen Sie auch über eine benutzerdefinierte Routenvorlage für Ihre Aktionsmethode? – Shyju

Antwort

0

Code sollte als Ergebnis Variablenwert solange gut arbeiten, ist ein gültiges Objekt /Sammlung. Ihr Ajax-Anruf wird zu dem Fehlerrückruf weitergeleitet, wenn er null Antwort von dem Server empfängt, wo es eine Json-Datenstruktur als die Antwort erwartet. Da jQuery den Wert null nicht in einen gültigen JSON konvertieren konnte, wird dieser Fehler angezeigt.

Stellen Sie sicher, dass Ihre Aktionsmethode keinen Wert null zurückgibt. Wenn eine Sammlung zurückgegeben wird, sollten Sie eine leere Sammlung zurückgeben, wenn keine Daten vorhanden sind. Ich persönlich bevorzuge es, die Antwort in eine andere Wrapper-Antwort zu packen, um diese Art von Situation zu behandeln.

var result = Repository.FindBy(date, id);  
return Json(new { status="success", data=result } , JsonRequestBehavior.AllowGet); 

Dies wird wieder eine JSON-Struktur wie diese

{ 
    "status":"success", 
    "data": null // or a valid object/array here 
} 

Jetzt in Ihrem Erfolg Handler Zugriff auf die data Eigenschaft nach null zu überprüfen.

successHandler = function (response) { 
     if(response.status==="success") 
     { 
      if(response.data!=null) 
      { 
      console.log(success); 
      return success; 
      } 
      else 
      { 
      console.log('data is null. may be no data for your filter'); 
      } 
     } 
}; 

Auch könnten Sie DateTime? Typ für die Parameter statt Lesen Sie den Wert in Zeichenkette prüfen, mit und es wieder Parsen.

Verwandte Themen