2012-01-09 2 views
0

J'essaye d'implémenter un moyen Ajax pour mettre à jour ma grille de données. Jusqu'à présent, j'ai codé ce qui suit dans mon contrôleur:Problèmes implémentant Ajax pour retourner une page HTML.Partial dans MVC3

public ActionResult Detail(string ac, string me) {  
    vm.AdminDetails = _link.Detail(ac + me).ToList();  
    if (Request.IsAjaxRequest())   
     return PartialView(vm);  
    return View(vm); 
} 

Mon aperçu de la vue ressemble à ceci:

@model ViewModels.Shared.BaseViewModel 
@{ 
    Layout = "~/Areas/Administration/Views/Menus/_Layout.cshtml"; 
} 

@section content { 
<div class="bdy_box"> 
     <div id="detailData" class="rep_tb0"> 
     // code to generate the list of data 
     </div> 
</div> 

Mon instantané du javascript ressemble à ceci:

function reload(entity, pk) { 
    $.ajax({ 
     url: "/Administration/" + entity + "s/Detail", 
     data: { pk: pk }, 
     dataType: 'html', 
     cache: false, 
     success: function (responseText) { 
      $('#detailData').html(responseText); 
     } 
    }); 
}; 

Les données sont renvoyées MAIS mon problème est que d'autres données sont également renvoyées. Quand je regarde le contenu de detailData, je vois beaucoup plus que ce dont j'ai besoin. Par exemple, je vois quelque chose comme ce qui suit:

<div class="rep_tb0" id="detailData"> 
<title></title>  
<meta content="" name="title">  
<meta content="" name="description">  
<meta content="" name="keywords">  
<link type="image/x-icon" href="/Content/Favicons/default.ico" rel="shortcut icon">  
<link type="text/css" rel="stylesheet" href="/Content/Stylesheets/Style203.css"> 

Y at-il une raison pour laquelle il me montrant tout cela et comment puis-je arrêter tout montrer ce type d'information d'en-tête?

Répondre

1

Melissa,

Je suppose que vous avez un PartialView appelé _detail.cshtml (sinon, vous devez en créer un) ??

Je crois que vous êtes peut-être en train d'appeler la vue 'full' detail.cshtml basée sur votre exemple. Je suggère que vous appeliez votre action le long des lignes suivantes:

public ActionResult Detail(string ac, string me) {  
    vm.AdminDetails = _link.Detail(ac + me).ToList();  
    if (Request.IsAjaxRequest())   
     return PartialView("_details", vm);  
    return View(vm); 
} 
+0

Aucune vue partielle. Ce sont des données Ajax qui remontent au javascript. –

+0

Melissa, tu vas avoir besoin d'avoir une vue partielle pour que ça marche, sinon ton div va toujours être peuplé avec le contenu de la vue complète. créez une vue partielle avec les éléments 'partiels' requis et vous serez prêt à partir. (Aussi, modifiez votre action selon ma réponse ci-dessus) –

+0

Jim. En passant par ce que StanK dit dans ce billet, je ne crois pas qu'il dise que j'ai besoin d'une vue partielle. Peut-être que je suis juste en train de le lire, mais il semble qu'il dit que tout ira bien et ne fait aucune mention d'une autre vue http://stackoverflow.com/questions/8782879/how-can-i-code-a-refresh-of -a-html-renderpartial-en utilisant-ajax-en-mvc3/8782887 # comment10958218_8782887 –

0

Vous devez vous assurer que votre demande est faite avec X-Requested-With En-tête HTTP en cours de définition. Vérifiez que les outils de développement addon à votre navigateur (dans Chrome et IE9 il est intégré, dans Firefox obtenir Firebug). Vous voudrez peut-être doubler vérifier votre code sous différents navigateurs car il y avait différents problèmes inexpliqués qui se produisent dans le passé avec IsAjaxRequest (dépendant éventuellement sur les paramètres du navigateur)