2010-02-10 15 views
7

Mam kod ajax dla asp.net (non-mvc), aby zadzwonić do webMethod, aby uzyskać dodatkowe dane z serwera dla żądania. Ale wydaje mi się, że nie mogę znaleźć adresu URL, aby podać mój JQuery w MVC.Jak wywołać metodę kontrolera z JQuery?

<script type="text/javascript" language="javascript"> 
function SubmitAjax(url, message, successFunc, errorFunc) { 
    $.ajax({ 
     type:"POST", 
     url:url, 
     data:message, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success:successFunc, 
     error:errorFunc 
     }); 

}; 

Nie chcę przekazać całą listę danych związanych z wybranej listy, aby każda osoba, która przyjeżdża na stronie, ponieważ nie wszystkie będą musiały tę funkcjonalność. Chciałbym zadzwonić do kontrolera lub metody internetowej za pośrednictwem JQuery, ale nie wydaje się, aby dowiedzieć się, jak adres URL w MVC.

zauważyłem tego posta: JQuery Ajax call gets resolved to the current Controller Folder, Instead of root Folder

jest metodą MVC $ .getJSON? czy to jest dobre rozwiązanie dla mojego przypadku użycia? Muszę tylko zwrócić adres URL łańcucha lub pusty ciąg znaków, jeśli szukany element nie zostanie znaleziony. Czy muszę dołączyć metodę $ .getJSon? jest częścią MVC lub częścią JQuery? Czy wiodący slash wskazuje na katalog główny aplikacji lub katalog główny serwera?

+0

MVC nie jest specyficzną biblioteką z rzeczywistymi nazwami funkcji. Jest to wzór * projektu * ... chyba że Microsoft faktycznie nazwał ramy, które ... które mogą, pomyśl o tym. Oryginalność nie jest ich mocną stroną. (Googling to ...) - Ale na punkcie ... '$ .getJson' jest funkcją jQuery do pobierania danych JSON za pośrednictwem żądań AJAX. Nie ma nic szczególnego do czynienia z .Net. – Atli

+0

Adres URL jest zawsze adresem URL. Nie działa inaczej w asp.net mvc. –

+0

@Atli Nie jestem pewien, do której części się odwołujesz, na górze miałem na myśli Asp.net MVC, na dole miałem na myśli javascripts Asp.net MVC, które są dołączone. – Maslow

Odpowiedz

0

Problem był Tag WebMethod na kontrolerze, co było potrzebne i pomocne w ASP.NET, ale nie w ASP.NET MVC

3

Spróbuj wpis: Basic AJAX example with ASP.NET MVC?

czy to jedno: How to get the Json object for drop down?

Powinny one dać kilka wskazówek.

Zasadniczo, $ .getJson jest metodą jQuery, a nie MVC, ale użyj go w połączeniu z kontrolerem MVC zwracającym wynik Json.

+0

@Johannes dzięki to jest mój adres URL: '" Ticket/CheckForInstaller "' ale nie można znaleźć..Mój klasa kontrolera jest 'TicketController' metoda jest' [WebMethod] public ContentResult CheckForInstaller (int appId) ', ale nie są one ' t w kolejce. – Maslow

+0

@Maslow Musisz podać odpowiedni parametr dla swojego działania. Twoje działanie to "CheckForInstaller" i wymaga "appId".Jeśli jest to zarejestrowane na twojej trasie, możesz po prostu zadzwonić "Ticket/CheckForInstaller/1" ("1" to tylko przykład appId). Jeśli nie jest zarejestrowany, powinien wyglądać następująco: "Ticket/CheckForInstaller? AppId = 1" –

+1

w przykładzie, w którym używa POST, więc "appId" powinien być parametrem post (niewidoczny w url). –

1

Możesz użyć $ .getJSON (adres URL, [dane], [wywołanie zwrotne (dane)]), gdzie dane to Twój zwrócony obiekt danych json.

Alternatywnie możesz użyć $ .post (adres URL, [dane], [wywołanie zwrotne (dane)]), w którym dane są retureowane jako ciąg znaków/obiekt danych.

url: jest to względny adres URL do kontrolera/działania/skryptu, który zwraca json/dane z powrotem.

Powyższe metody są jquery i można je używać, jeśli dołączono plik jquery js.

2

Cóż, domyślam się, że masz problemy z budowaniem adresów URL. Jeśli nie masz ukośnika przed adresem, to będzie on odnosił się do twojego aktualnego adresu URL. Więc jeśli aktualny adres URL to: /Home/Index i masz taki link: <a href="Ticket/CheckForInstaller">Text</a>, ten link wskaże następujący adres URL: /Home/Index/Ticket/CheckForInstaller. To zawsze jest zachowanie w przeglądarce. To samo dzieje się, jeśli masz stronę w folderze w aplikacji do tworzenia formularzy internetowych. Nie ma nic innego, jak adres URL mvc asp.net, a następnie dowolny inny framework sieciowy. Adres URL, którego chcesz, to prawdopodobnie ten: /Ticket/CheckForInstaller.

Framework asp.net mvc dostarcza jednak pomocników, dzięki czemu nie trzeba sztywno kodować żadnego adresu URL. Można to zrobić tak:

<%=Url.Action("Ticket", "CheckForInstaller")%> 

Ale jedyną rzeczą, to będzie zrobić, to znaleźć odpowiedni URL wskazujący tego działania („/ bilety/CheckForInstaller”, w zależności od trasy) i zapisać go na zewnątrz.

1

To co robiłem ostatnio, i to pracuje dobrze .

  1. uzyskać ścieżkę głównego i przechowywać w ukrytym wejścia (wymienić [Z <)

    wejściowy [id = "URLBase" type = "ukryte" value =”<% = Url.Content ("~")%>”/>

  2. Get wartość tego wkładu i przechowywać go w js (przy użyciu jQuery w tym przypadku)

    _urlBase = $ ("# URLBase") val().;

  3. Użyj tej zmiennej zadzwonić kontrolerów

    $ .ajax ({type: "GET", url: _urlBase + "Controller/Action", dataType: "json"});

Powiązane problemy