2009-06-24 2 views
0

Ich versuche, ein json serialisiertes Objekt aus einem MVC-Benutzersteuerelement mithilfe von jQuery abzurufen. Das Problem ist, dass das Ergebnis der vollständige HTML-Code für die Seite ist, die mein Steuerelement enthält. Die Seite und die Steuerung verwenden denselben Controller. Ich habe versucht, die Methode zu brechen, die ich im Controller anrufe, und sie wird nie getroffen. Ich habe verschiedene Inkarnationen der jQuery Ajax-Aufrufe ausprobiert und das gleiche Ergebnis erzielt.JsonResult gibt HTML-Ansicht statt eines serialisierten Objekts zurück, wenn es von jQuery aufgerufen wird. Get()

jQuery-Code:

<script type="text/javascript"> 
$('#Project_GeneralContractor_Id').change(function() { 
    //alert('<%= Url.Action("GetGeneralContractor", "Projects") %>/1'); 
    $.get('<%= Url.Action("GetGeneralContractor", "Projects") %>', { id: $('#Project_GeneralContractor_Id').val() }, function(data) { 
     alert(data); 
    }); 
}); 
</script> 

Controller-Code:

public JsonResult GetGeneralContractor(int id) 
{ 
    return Json(_GeneralContractorRepository.Get(id)); 
} 

Wo $ ('# Project_GeneralContractor_Id') ist eine Dropdown-Liste und _GeneralContractorRepository.Get (id) liefert ein individuelles GeneralContractor Objekt.

Nicht sicher, was ich habe, aber ich vermute die jQuery Seite, da ich nicht scheinen kann, eine Pause in der Steuerung zu bekommen.

Antwort

0

Haben Sie versucht, getJSON() zu verwenden?

Wenn das nicht ist, werde ich in Richtung serverseitigen Problem neigen. Es ist schwer zu erraten, ohne auf die zurückgegebene Seite zu schauen.

+0

getJSON gibt dasselbe zurück. Merkwürdigerweise merke ich gerade, dass der Call meine Indexaktion in diesem Controller auslöst. Es beginnt zu denken, dass es sich um ein Routenproblem handelt. – nkirkes

+0

Ich habe meine eigene Frage zu diesem Thema beantwortet, aber da Sie auf ein serverseitiges Problem hingewiesen haben (was es war), verdienen Sie den Kredit. – nkirkes

0

Sie müssen den Typ angeben: json (vierter optionaler Parameter für $ .get). Siehe $.get arguments.

$.get('<%= Url.Action("GetGeneralContractor", "Projects") %>', { id: $('#Project_GeneralContractor_Id').val() }, function(data) { 
     alert(data); 
    }, "json"); 
+0

Ich hatte das schon probiert. Gleiches Ergebnis. – nkirkes

+0

@mannish - Haben Sie es nach dem Rückruf wie oben beschrieben versucht? – karim79

+0

Yup, genau so. – nkirkes

0

Es war ein Routing-Problem. Mein Projects-Controller hat einige spezielle Routenfälle. Ich habe einen separaten Controller erstellt, um GeneralContractors zu verwalten, und alles ist gut.

Verwandte Themen