2011-01-03 9 views
6

Vorrei prendere un metodo di azione esistente, restituire il suo valore di ritorno a una stringa e inviarlo come JSON per una risposta a una richiesta AJAX.ASP.NET MVC: Come convertire un ActionResult in stringa?

Per fare questo, ho bisogno di rendere un ActionResult a una stringa. Come faccio a fare questo?

Abbiamo il contrario dove possiamo convertire una stringa in un ActionResult usando this.Content().

Aggiornamento

L'attuale e il 1 ° metodo di azione restituisce un tipo ActionResult ma restituisce davvero un ViewResult di rispondere alla richiesta HTTP POST. Ho un secondo metodo di azione (la mia facciata) che restituisce un JsonResult che risponde alle richieste AJAX. Voglio questo secondo metodo di azione per utilizzare il 1 ° metodo di azione per il rendering dell'HTML.

Nel grande schema delle cose, voglio un ActionResult (generato da un metodo di azione) recuperabile non solo da un post HTTP standard, ma anche da una richiesta AJAX tramite un metodo di azione facciata (il secondo metodo di azione). In questo modo, io, come sviluppatore, ho la possibilità di utilizzare un post HTTP o AJAX per recuperare il rendering di una pagina.

Spiacente, ho cercato di rendere questo aggiornamento il più breve possibile. Grazie.

+1

Sicuramente 'ContentResult' o' JsonResult' è quello che vuoi. –

risposta

6

Stai cercando il numero 4 o 6 sotto?

Testo estratto da here:

azione intesa Risultati

Un'azione di controllo restituisce qualcosa chiamato un risultato azione. Un risultato di azione è ciò che un'azione del controller restituisce in risposta a una richiesta del browser.

Il framework ASP.NET MVC supporta diversi tipi di risultati di azione, tra cui:

  1. ViewResult - Rappresenta HTML e markup.
  2. EmptyResult - Non rappresenta alcun risultato.
  3. RedirectResult - Rappresenta un reindirizzamento a un nuovo URL.
  4. JsonResult - Rappresenta un risultato di notazione oggetto JavaScript che può essere utilizzato in un'applicazione AJAX.
  5. JavaScriptResult - Rappresenta uno script JavaScript.
  6. ContentResult - Rappresenta un risultato di testo.
  7. FileContentResult - Rappresenta un file scaricabile (con il contenuto binario).
  8. FilePathResult - Rappresenta un file scaricabile (con un percorso).
  9. FileStreamResult - Rappresenta un file scaricabile (con un flusso di file).

Tutti questi risultati dell'azione ereditano dalla classe ActionResult di base.

+1

# 6 era quello che stavo cercando. Grazie! +1 –

1

ritorno come un ContentResult piuttosto che un ActionResult

io uso qualcosa come

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' è probabilmente una scelta ancora migliore. –

+1

Penso che probabilmente hai ragione ... Potrei dare un'altra occhiata al mio codice :-) – Andiih

1

Sei sicuro JsonResult non è ciò che si vuole? Se chiami il metodo Json(object jsonObject) definito in Controller, serializzerà jsonObject in JSON e restituirà una risposta appropriata (con tutte le intestazioni correttamente impostate e tutto il resto). Generalmente le richieste JSON devono essere POST, ma puoi configurarle per consentire anche GET.

+0

Il metodo di azione esistente restituisce un ActionResult ma restituisce veramente un ViewResult. Non posso restituire un JsonResult per il metodo Action esistente, ma vorrei usare JsonResult per il metodo Action che invierà Json. Ci sono due metodi da prendere in considerazione. – burnt1ce

+2

Ma perché una richiesta AJAX vuole un'intera pagina? Riceverebbe troppe informazioni, il doctype, la testa, il corpo, ecc. Una richiesta AJAX non vorrebbe semplicemente una porzione di dati? Hai considerato di utilizzare 'Request.IsAjaxRequest()' per avere un'azione che gestisca entrambi gli scenari? –

Problemi correlati