2009-10-29 2 views
5

J'ai plusieurs méthodes d'action sur mon contrôleur qui renvoient une vue partielle (ascx), et je veux que ces vues partielles soient rendues en cliquant sur les différents JQuery Onglets de l'interface utilisateurAsp.Net MVC charger une vue partielle en utilisant ajax à partir d'un onglet JQuery UI

Les onglets sont définis comme suit:

<div id="tabs"> 
    <li><a href="#FirstTab" title="First tab">First tab</a></li> 
    <li><%= Html.ActionLink("General", "General", new {id=Model.Id}) %></li> 
    <li><%= Html.ActionLink("Details", "Details", new {id=Model.Id}) %></li> 
    <div id="FirstTab"> 
    ... 
    </div> 
</div> 

Cela rend les onglets très bien, le premier onglet (avec un contenu statique) est affiché correctement, mais lorsque je clique sur les autres onglets, rien ne se passe.

Si au lieu de renvoyer une vue partielle des méthodes d'action, je retourne simplement du contenu brut, cela restitue le contenu et les onglets fonctionnent parfaitement.

Une idée de ce que je fais mal?

Merci

+1

Jusqu'à présent, tout semble bon. Pouvez-vous vérifier si l'appel ajax se produit réellement? Et si cela se produit, qu'est-ce qui revient de l'action? Vous pouvez vérifier cela facilement avec des outils comme FireBug. –

+0

Salut Johnny, oui, l'appel se passe (j'ai mis des points d'arrêt dans les actions et ils ont été touchés). J'ai corrigé le problème en utilisant des pages aspx au lieu de ascx (les pages aspx n'ont pas les balises html, head ou body, juste le contrôle que je veux rendre). Cela semble étrange cependant, ou peut-être que je n'ai pas compris la différence entre View et PartialView – willvv

+0

Je suis content que vous ayez trouvé une solution de travail. –

Répondre

9

Hey, j'ai fait la même chose récemment. J'ai simplifié pour être plus clair:

Le html:

<div class="tabs"> 
       <ul> 
        <li> 
         <a onclick="TabItemClicked(this,<%=Url.Action("General", new {id=Model.Id}) %>))" href="#fragment1"> 
         <span>General</span> 
         </a> 
        </li> 
        <li> 
         <a onclick="TabItemClicked(this,<%= Html.ActionLink("Details", new {id=Model.Id}) %>))" href="#fragment2"> 
         <span>Details</span> 
         </a> 
        </li> 
       </ul> 
       <div id="fragment1"></div> 
       <div id="fragment2"></div> 
    </div> 

et le code JQuery:

function TabItemClicked(a, action) { 

    var container = $(a).parents('div.tabs'); 
    var resultDiv = $($(a).attr('href'), container); 

    $.ajax({ 
     type: "POST", 
     url: action, 
     data: {}, 
     success: function(response) { 
      resultDiv.html(''); 
      resultDiv.html(response); 
     } 
    }); 
} 
+0

Merci, je sais que cela va fonctionner, mais j'essayais de le réaliser avec la fonctionnalité par défaut des onglets JQuery UI ... – willvv

+0

oh, d'accord. Eh bien, merci pour l'acceptation :) –

Questions connexes