2009-02-11 16 views
6

estoy tratando de pasar un poco de texto de un cuadro de texto a un controlador para obtener resultados JSON como asíjQuery getJSON que no pasa ningún valor al controlador

function invokeAction() { 
     var searchText = $("#SearchTextBox").val(); 

     // Invoke MVC controller action 
     $.getJSON("/Home/Results/" + searchText, bindResults); 
    } 

Si pongo una alerta aquí puedo ver que searchText tiene definitivamente un valor, pero cuando pongo un punto de quiebre en esta acción del controlador:

public ActionResult Results(string search) 
    { 
     var r = from t in db.Restaurants 
       where SqlMethods.Like(t.Name, "%" + search + "%") || SqlMethods.Like(t.Postcode, search + "%") || SqlMethods.Like(t.CuisineType.Type, search + "%") 
       orderby t.Name ascending 
       orderby t.Rating descending 
       orderby t.NumOfViews 
        descending 
       select t; 

     return Json(r.ToList()); 
    } 

la cadena pasada es nulo, sin embargo, cuando compruebo el contexto http en el depurador mi searchText es una parte de la URL.

Como esto es nulo, la consulta no devuelve resultados.

¿Falta algo aquí?

Respuesta

9

Tuve algunos problemas para devolver json de los servicios y no recibí ninguna llamada. Resultó que el json estaba mal formado y pude probarlo y obtener esos errores manejando la opción de error de la llamada ajax normal.

$.ajax({ 
    type: "GET", 
    url: "Home/Results/", 
    data: { search: searchText }, 
    dataType: "json", 
    error: function(xhr, status, error) { 
    // you may need to handle me if the json is invalid 
    // this is the ajax object 
    }, 
    success: function(json){ 
    alert("Data Returned: " + json); 
    } 
}); 
+0

Gracias, lo usé y atrapé un error. También usé Firebug, lo que me dijo que tengo una referencia circular. Creo que necesito ordenar mi base de datos un poco. – ddd

+0

Genial, me alegro, ¿así que obtengo la respuesta? – bendewey

+0

Si bendewey, puede obtener la respuesta;) – ddd

2

Usted tendrá que corregir su ruta y reemplazar {id} {búsqueda} con el fin de conseguir que se una al parámetro correcto - intentar algo como esto:

routes.MapRoute("search", "Home/Results/{search}", 
    new { controller = "Home", action = "Results" }); 

Si usted no quiere para hacer eso, puede hacerlo de esta manera, especificando el ParameterName como una cadena de consulta estándar Parámetro

$.getJSON("/Home/Results?search=" + searchText,bindresults); 

que va a arreglar la unión.

+0

He cambiado t0 $ .getJSON ("/ Inicio/Resultados /", {búsqueda: searchText}, la función (datos) {alert ("g"); movieView.set_data (datos);}); donde el cuadro de alerta está ahí para la depuración. El hecho es que nunca se llega. Si pongo un punto de interrupción en el controlador, devuelve un resultado JSON. Alguna idea? – ddd

+0

Realmente llama a esa función, pero solo si el controlador no devuelve resultados. No creo que se llame a los datos del conjunto cuando lo intento. ¿Tendría que borrar los datos anteriores? – ddd

+0

prueba un básico return Json (new {result = "hello"}); y ver si eso funciona –

Cuestiones relacionadas