2011-01-03 13 views
6

Chciałbym podjąć istniejącą metodę działania, wyrenderować jej wartość zwracaną i wysłać ją jako JSON do odpowiedzi na żądanie AJAX.ASP.NET MVC: Jak ukryć ActionResult na ciąg?

Aby to zrobić, muszę renderować ActionResult do łańcucha znaków. Jak mam to zrobic?

Mamy przeciwieństwo, w którym możemy przekonwertować ciąg znaków na ActionResult, używając this.Content().

Aktualizacja

Istniejący i sposób 1-ty akcja zwraca typu ActionResult ale to naprawdę zwraca ViewResult do reagowania na żądanie HTTP POST. Mam drugą metodę działania (moja fasada), która zwraca obiekt JsonResult, który odpowiada na żądania AJAX. Chcę, aby ta druga metoda działania użyła pierwszej metody działania do renderowania kodu HTML.

W wielkim schemacie chcę, aby ActionResult (wygenerowany z metody działania) był dostępny nie tylko przez standardowy wpis HTTP, ale także przez żądanie AJAX za pomocą metody działania fasady (druga metoda działania). W ten sposób ja, jako programista, mam wybór użycia Postu HTTP lub AJAX do pobrania renderowania strony.

Przepraszamy, próbowałem uczynić tę aktualizację tak krótką, jak to możliwe. Dzięki.

+1

Z pewnością "ContentResult" lub "JsonResult" jest tym, czego potrzebujesz. –

Odpowiedz

6

Szukasz numeru 4 lub 6 poniżej?

Tekst pochodzących z here:

Zrozumienie Action Wyniki

akcji kontrolera zwraca coś nazywaną wynikiem działania. Wynik działania jest tym, co akcja kontrolera zwraca w odpowiedzi na żądanie przeglądarki.

Ramy ASP.NET MVC obsługuje kilka rodzajów wyników działania w tym:

  1. ViewResult - Reprezentuje HTML i znaczników.
  2. EmptyResult - Reprezentuje brak wyniku.
  3. RedirectResult - Reprezentuje przekierowanie do nowego adresu URL.
  4. JsonResult - Reprezentuje wynik JavaScript Object Notation, który może być użyty w aplikacji AJAX.
  5. JavaScriptResult - Reprezentuje skrypt JavaScript.
  6. ContentResult - Reprezentuje wynik tekstowy.
  7. FileContentResult - Reprezentuje plik do pobrania (z zawartością binarną).
  8. FilePathResult - Reprezentuje plik do pobrania (ze ścieżką).
  9. FileStreamResult - Reprezentuje plik do pobrania (ze strumieniem pliku).

Wszystkie te wyniki akcji dziedziczą z podstawowej klasy ActionResult.

+1

# 6 było tym, czego szukałem. Dzięki! +1 –

1

Return to jako ContentResult raczej niż ActionResult

używam coś

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

"JsonResult" jest prawdopodobnie lepszym wyborem. –

+1

Myślę, że prawdopodobnie masz rację ... Mogę jeszcze raz rzucić okiem na mój kod :-) – Andiih

1

Czy na pewno JsonResult nie jest to, co chcesz? Jeśli wywołasz metodę Json(object jsonObject), która jest zdefiniowana w Controller, będzie serializować jsonObject do JSON i zwrócić odpowiednią odpowiedź (wszystkie poprawnie ustawione nagłówki i wszystko inne). Generalnie żądania JSON muszą być POST, ale można je skonfigurować tak, aby umożliwić GET również.

+0

Istniejąca metoda akcji zwraca ActionResult, ale naprawdę zwraca ViewResult. Nie mogę zwrócić JsonResult dla istniejącej metody Action, ale użyłbym JsonResult do metody Action, która będzie dostarczać Json. Istnieją dwie metody wzięcia pod uwagę. – burnt1ce

+2

Ale dlaczego żądanie AJAX ma mieć całą stronę? Otrzymałby on o wiele za dużo informacji, typ doktora, głowę, ciało itd. Czy żądanie AJAX nie chciałoby po prostu kawałka danych? Czy rozważałeś użycie 'Request.IsAjaxRequest()', aby jedna akcja obsłużyła oba scenariusze? –

Powiązane problemy