2012-10-12 15 views
5

Sto tentando di creare un sito Web MVC con chiamata Ajax. Non ho problemi ad usare direttamente jquery, ma quando uso @ Ajax.ActionLink, non ottengo il risultato che voglio. Qui è la mia opinione:MVC 4 Ajax.Azione link non funzionante

<script type="text/javascript"> 
     function deleteComment(id) { 
      $.post(
       "/Role/AjaxTest", 
       //{ id: id }, 

       function (data) { 
        $("#testtarget").html(data);    
       }); 
     } 
    </script> 


    <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 
    <h2>TITLE</h2> 
    <p> 
@Ajax.ActionLink("Ajax Test", "AjaxTest", "Role", new AjaxOptions{UpdateTargetId="testtarget",HttpMethod = "Get" , InsertionMode = InsertionMode.Replace }) 
    </p> 
    <table>  
    @foreach (var item in Model) { 
     <tr> 
      <td> 
       @Html.DisplayFor(modelItem => item.RoleName) 
      </td> 
      <td> 
       <a onclick="deleteComment('@item.RoleId'); return false;" href="#">Delete</a> 
       @Html.ActionLink("Delete", "Delete", new { id=item.RoleId }) 

      </td> 
     </tr> 
    } 
    </table> 
    <div id="testtarget">Test Div</div> 

e qui è il mio dati Controler:

public string AjaxTest() 
{ 
    return "Some random text"; 
} 

My Call su Jquery funziona perfettamente e il testo appare nel div, ma il mio ActionLink mi reindirizza a: localhost/Role/AjaxTest quindi ho solo il messaggio in un browser bancario.

Qualche idea di cosa c'è che non va qui?

Grazie mille in anticipo!

+0

Sei sicuro che il file 'jquery.unobtrusive-ajax.min.js' viene caricato? –

+0

Sì, quando faccio clic sul collegamento nella mia origine pagina web: lo apre. – Tom

risposta

9

Assicurarsi di aver aggiunto lo script jquery.unobtrusive-ajax.js alla pagina:

<script type="text/javascript" src="~/scripts/jquery.unobtrusive-ajax.js"></script> 

o se si utilizza fasci (che è l'approccio raccomandato) assicurarsi di aver incluso un pacco contenente questo script. Per esempio, quando si crea un nuovo progetto ASP.NET MVC 4 utilizzando il modello Internet che sarebbe il ~/bundles/jqueryval bundle:

bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
    "~/Scripts/jquery.unobtrusive*", 
    "~/Scripts/jquery.validate*") 
); 

Quindi assicurarsi che sia incluso nella vista dopo che il fascio jquery:

@Scripts.Render("~/bundles/jquery") 
@Scripts.Render("~/bundles/jqueryval") 

Oppure combinali in un unico pacchetto. Tutto dipenderà dalle tue esigenze e dal fatto che tu abbia bisogno o meno del supporto di validazione jQuery discreto.

lo consiglio anche di avere il vostro ActionResult ritorno azione di controllo e non stringa:

public ActionResult AjaxTest() 
{ 
    return Content("Some random text"); 
} 
+1

Perfetto, grazie mille, tutto ciò che hai detto era nel mio progetto, non avevo il @ Scripts.Render ("~/bundles/jqueryval"). Così l'ho aggiunto alla mia pagina e ha fatto il trucco, è "saggio", per inserirlo nella pagina principale del layout? Suppongo che verrà usato in molte pagine. Grazie mille per il vostro aiuto! Era bloccato su questo per come 4 ore ... – Tom

2

provare a utilizzare F12 nel browser e verificare se si ottiene eventuali errori di script nella vostra console. Fiddler aiuterà anche a identificare se una delle tue librerie non è correttamente referenziata o caricata.

+0

Grazie! Questo era parte del mio problema, non era stato definito jquery, quindi ho fatto quello che il post successivo suggeriva. – Tom

Problemi correlati