Próbuję utworzyć akcje kontrolera, które zwrócą albo JSON, albo częściowy HTML w zależności od parametru. Jaki jest najlepszy sposób, aby asynchronicznie zwrócić wynik na stronę MVC?
ajax
asp.net-mvc
json
asp.net-ajax
NathanD
źródło
źródło
Myślę, że powinieneś rozważyć AcceptTypes żądania. Używam go w moim bieżącym projekcie, aby zwrócić poprawny typ zawartości w następujący sposób.
Twoje działanie na kontrolerze może to przetestować jak na obiekcie żądania
Następnie możesz zaimplementować aspx widoku, aby uwzględnić przypadek częściowej odpowiedzi xhtml.
Następnie w jQuery możesz go pobrać, przekazując parametr type jako json:
Mam nadzieję, że to pomaga Jamesowi
źródło
Innym dobrym sposobem radzenia sobie z danymi JSON jest użycie funkcji getJSON JQuery. Możesz zadzwonić do
Metoda z metody getJSON jquery po prostu ...
źródło
return Json(new {foo="bar", baz="Blech"});
ma!Znalazłem kilka problemów z implementacją wywołań MVC ajax GET z JQuery, które spowodowały u mnie bóle głowy, dlatego dzielę się rozwiązaniami tutaj.
JsonRequestBehavior.AllowGet
; bez tego MVC zwrócił błąd HTTP 500 (dataType: json
podany na kliencie).cache: false
do wywołania $ .ajax, w przeciwnym razie ostatecznie otrzymasz odpowiedzi HTTP 304 (zamiast odpowiedzi HTTP 200), a serwer nie przetworzy Twojego żądania.Przykładowy JQuery:
Przykładowy kod MVC:
źródło
Aby odpowiedzieć na drugą połowę pytania, możesz zadzwonić:
gdy chcesz zwrócić częściowy kod HTML. Musisz tylko znaleźć sposób, aby zdecydować, czy żądanie chce JSON czy HTML, być może na podstawie części / parametru adresu URL.
źródło
Alternatywne rozwiązanie ze szkieletem incoding
Działanie zwróć json
Kontroler
Strona Razor
Akcja zwraca HTML
Kontroler
Strona Razor
źródło
Możesz rzucić okiem na ten bardzo pomocny artykuł, który opisuje to bardzo ładnie!
Pomyślałem, że może to pomóc ludziom szukającym dobrego rozwiązania tego problemu.
http://weblogs.asp.net/rashid/archive/2009/04/15/adaptive-rendering-in-asp-net-mvc.aspx
źródło
PartialViewResult i JSONReuslt dziedziczą z klasy podstawowej ActionResult. więc jeśli typ zwrotu zostanie określony dynamicznie, zadeklaruj wynik metody jako ActionResult.
źródło
Dla osób, które dokonały aktualizacji do MVC 3, tutaj jest fajny sposób korzystania z MVC3 i Json
źródło
źródło
Elastyczne podejście do tworzenia różnych wyników na podstawie żądania
Request.IsAjaxRequest()
Metoda jest bardzo prosta: to tylko sprawdza nagłówki HTTP na żądanie przychodzące, aby sprawdzić, czy wartość żądanego X-Z jest nagłówekXMLHttpRequest
, który jest automatycznie dołączany przez większość przeglądarek i ram AJAX.Niestandardowa metoda rozszerzenia, aby sprawdzić, czy żądanie dotyczy json, czy nie, abyśmy mogli je wywołać z dowolnego miejsca, podobnie jak metoda rozszerzenia Request.IsAjaxRequest ():
Źródło: https://www.safaribooksonline.com/library/view/programming-aspnet-mvc/9781449321932/ch06.html#_javascript_rendering
źródło