2011-01-03 24 views
6

Me gustaría tomar un método de acción existente, presentar su valor de retorno a una cadena y enviarlo como un JSON para una respuesta a una solicitud de AJAX.ASP.NET MVC: ¿Cómo convertir un ActionResult a una cadena?

Para hacer esto, necesito renderizar un ActionResult en una cadena. ¿Cómo hago esto?

Tenemos lo opuesto donde podemos convertir una cadena en un resultado de acción usando this.Content().

actualización

El método de acción existente y devuelve una primera ActionResult tipo, pero en realidad devuelve un ViewResult para responder a la solicitud HTTP POST. Tengo un segundo método de acción (mi fachada) que devuelve un JsonResult que responde a las solicitudes de AJAX. Quiero que este segundo método de acción use el primer método de acción para representar el HTML.

En el gran esquema, quiero que un ActionResult (generado a partir de un método de acción) sea recuperado no solo por una publicación HTTP estándar, sino también por una solicitud AJAX mediante un método de acción de fachada (el 2º método de acción). De esta forma, yo, como desarrollador, tengo la opción de usar una publicación HTTP o AJAX para recuperar la representación de una página.

Lo siento intenté hacer esta actualización lo más breve posible. Gracias.

+1

Seguramente 'ContentResult' o' JsonResult' es lo que quieres. –

Respuesta

6

¿Está buscando el número 4 o 6 abajo?

Texto extraído de here:

comprensión de la acción Resultados

una acción de controlador vuelve algo que se llama un resultado acción. Un resultado de acción es lo que devuelve una acción de controlador en respuesta a una solicitud del navegador.

El marco ASP.NET MVC soporta varios tipos de resultados de acción que incluyen:

  1. ViewResult - Representa HTML y marcado.
  2. EmptyResult: no representa ningún resultado.
  3. RedirectResult: representa una redirección a una nueva URL.
  4. JsonResult: representa un resultado de notación de objetos JavaScript que se puede usar en una aplicación AJAX.
  5. JavaScriptResult: representa un script de JavaScript.
  6. ContentResult: representa un resultado de texto.
  7. FileContentResult - Representa un archivo descargable (con el contenido binario).
  8. FilePathResult: representa un archivo descargable (con una ruta de acceso).
  9. FileStreamResult: representa un archivo descargable (con una secuencia de archivos).

Todos estos resultados de acciones heredan de la clase base ActionResult.

+1

# 6 era lo que estaba buscando. ¡Gracias! +1 –

1

devolverlo como una ContentResult en lugar de un ActionResult

utilizo algo como

public ContentResult Place(string person, string seat) 
    { 
     string jsonString = null; 
     try 
     { 

      jsonString = AllocationLogic.PerformAllocation(person, seat); 
     } 
     catch { 
      jsonString = AllocationLogic.RaiseError(timeout); 
     } 
     return Content(jsonString); 
    } 
+2

Un 'JsonResult' es probablemente una mejor opción. –

+1

Creo que probablemente tenga razón ... Es posible que tenga otra mirada a mi código :-) – Andiih

1

¿Seguro JsonResult no es lo que quiere? Si llama al método Json(object jsonObject) que se define en Controller, serializará jsonObject en JSON y devolverá una respuesta adecuada (con todos los encabezados configurados correctamente y todo eso). En general, las solicitudes JSON deben ser POST, pero puede configurarlo para permitir GET también.

+0

El método de acción existente devuelve un resultado de acción pero realmente devuelve un resultado de visualización. No puedo devolver un JsonResult para el método de Acción existente, pero usaría JsonResult para el método de Acción que enviará el Json. Hay dos métodos a tener en cuenta. – burnt1ce

+2

¿Pero por qué una solicitud AJAX quiere una página completa? Recibiría demasiada información, el tipo de documento, la cabeza, el cuerpo, etc. ¿No sería una solicitud de AJAX solo una porción de datos? ¿Ha considerado usar 'Request.IsAjaxRequest()' para tener una acción que maneje ambos escenarios? –

Cuestiones relacionadas