2010-02-10 16 views
7

Ho un codice ajax per asp.net (non-mvc) per chiamare un webMethod per ottenere dati aggiuntivi dal server per una richiesta. Ma non riesco a capire l'url per dare il mio JQuery in MVC.Come si chiama un metodo controller da 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 
     }); 

}; 

Non voglio far passare l'intero elenco di dati correlati a una lista di selezione per ogni persona che arriva alla pagina, in quanto non tutti avranno bisogno di questa funzionalità. Quindi mi piacerebbe chiamare un controller o un webmethod tramite JQuery, ma non riesco a scoprire come indirizzare l'URL in MVC.

ho notato questo post: JQuery Ajax call gets resolved to the current Controller Folder, Instead of root Folder

è $ GetJSON un metodo MVC? questa è una buona soluzione per il mio caso d'uso? Ho solo bisogno di restituire un url di stringa, o una stringa vuota se ciò che sto cercando non viene trovato. Devo includere un metodo $ .getJSon? è quella parte di MVC o parte di JQuery? La barra principale punta verso la radice dell'applicazione o la radice del server?

+0

MVC non è una libreria specifica con nomi di funzioni reali. Si tratta di un modello di design * ... A meno che Microsoft non abbia effettivamente definito il framework ... che potrebbero, a pensarci. L'originalità non è il loro forte seme. (Googling che ...) - Ma sul punto ... '$ .getJson' è una funzione jQuery per recuperare i dati JSON tramite richieste AJAX. Non ha nulla a che fare con .Net. – Atli

+0

Un URL è sempre un URL. Non funziona in modo diverso in asp.net mvc. –

+0

@Atli non sono sicuro di quale parte si stia riferendo, nella parte superiore mi riferivo ad Asp.net MVC, in fondo mi riferivo ai javascripts di Asp.net MVC che arrivavano in bundle. – Maslow

risposta

0

Il problema era il Tag WebMethod sul controller, che era necessario o utile in asp.net, ma non in asp.net mvc

3

Prova questo post: Basic AJAX example with ASP.NET MVC?

o questa: How to get the Json object for drop down?

dovrebbero dare alcune indicazioni.

In sostanza, $ .getJson è un metodo jQuery, non uno MVC, ma utilizzare si desidera utilizzarlo in combinazione con il controller MVC che restituisce un risultato Json.

+0

@Johannes grazie questo è il mio url: '" Ticket/CheckForInstaller "' ma non ho trovato..la mia classe controller è 'TicketController' il metodo è' [WebMethod] public ContentResult CheckForInstaller (int appId) 'ma non sono ' Allineando. – Maslow

+0

@Maslow È necessario fornire un parametro appropriato per la propria azione. La tua azione è "CheckForInstaller" e richiede "appId".Se questo è registrato nel tuo percorso, puoi semplicemente chiamare "Ticket/CheckForInstaller/1" ("1" è solo un esempio di appId). Se non registrato, dovrebbe essere così: "Ticket/CheckForInstaller? AppId = 1" –

+1

nell'esempio che sta usando POST, quindi "appId" dovrebbe essere un parametro post (non visibile nell'URL). –

1

È possibile utilizzare $ .getJSON (url, [dati], [callback (dati)]) in cui i dati rappresentano l'oggetto dati JSON restituito.

In alternativa è possibile utilizzare $ .post (url, [dati], [callback (dati)]) in cui i dati sono oggetto stringa/dati ripristinato.

url: è l'url relativo al controller/azione/script che restituisce json/data back.

Quanto sopra sono metodi jquery e si può essere in grado di utilizzare se è stato incluso il file jquery js.

2

Bene, la mia ipotesi è che si abbiano problemi con la costruzione degli URL. Se non si dispone di una barra prima dell'URL sarà relativo al proprio URL corrente. Quindi, se l'url corrente è: /Home/Index e hai un link come questo: <a href="Ticket/CheckForInstaller">Text</a> allora quel collegamento punterà al seguente url: /Home/Index/Ticket/CheckForInstaller. Questo è sempre il comportamento nel browser. La stessa cosa accade se hai una pagina in una cartella in un'applicazione webforms. Non c'è nulla di diverso con un URL di asp.net mvc quindi con qualsiasi altro framework web. L'URL che desideri è probabilmente questo: /Ticket/CheckForInstaller.

Il framework asp.net mvc, tuttavia, fornisce all'utente degli helper in modo da non dover scrivere un codice hard in alcun URL. È possibile farlo in questo modo:

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

Ma l'unica cosa che questo farà fare è trovare l'URL appropriato che punta a che l'azione ("/ biglietto/CheckForInstaller", a seconda delle vie aeree) e scrivere fuori.

1

Questo è quello che ho fatto ultimamente, ed è stato lavorando bene .

  1. ottenere il percorso principale e memorizzarlo in un input nascosto (sostituire [con <)

    [ingresso id = "urlBase" tipo = valore "nascosto" =" <% = Url.Content ("~")%>"/>

  2. Prendi il valore di quella di ingresso e di conservarlo in js (usando jQuery in questo caso)

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

  3. Utilizzare questa variabile per chiamare i controllori

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

Problemi correlati