2015-12-22 5 views
0

J'essaie, sans aucun succès, d'ouvrir les détails sur un technicien dans une nouvelle fenêtre contextuelle via JQuery.Popup une nouvelle fenêtre avec ActionResult et JQuery

cshtml:

function Details(id) { 
    $.post('TechniciansProductivityDetails', { techId: id }, function (result) { 
     newpage = result; 
     window.open('TechniciansProductivityDetails', 'popUpWindow', 'height=400, width=650, left=300, top=100, resizable=yes, scrollbars=yes, toolbar=yes, menubar=no, location=no, directories=no, status=yes'); 
    }); 
} 

$(document).ready(function() { 
    $("#anchor1").click(function() { 
     if ($(this).find("dataListItemType1")) { 
      var id = $(".dataListItemType1").first().attr("id"); 
      Details(id); 
     } 
    }); 
}); 
contrôleur

:

[HttpPost] 
public ActionResult TechniciansProductivityDetails(string techId) 
{ 
    return View("TechniciansProductivity/TechniciansProductivityDetails", GetTechniciansProductivityDetailsModel(techId)); 
} 

Comportement attendu: ActionResult est appelé et techId est rempli avec le technicien attendu Id.

Comportement résultant: ActionResult est appelé deux fois. À la première fois, techId est correctement appelée, mais rien ne se passe du côté client. À la deuxième fois, techId est null, mais la fenêtre contextuelle s'ouvre sans aucune donnée.

+0

Est-TechniciansProductivityDetails un '' HttpPost' ou une action HttpGet'? – user1672994

+0

Quelle est l'utilisation de la variable 'newpage' si l'intention d'ouvrir les détails dans un popup? – user1672994

+0

Cela devrait être post. Dois-je spécifier avec l'annotation de données [HttpPost] '? –

Répondre

0

Par défaut, une action si n'est pas spécifié verbe explicite, alors il accepte les deux types de requête que ce soit GET ou POST. mais lorsqu'une méthode d'action est décorée avec l'attribut [HttpGet] ou [HttpPost], la méthode d'action accepte uniquement la méthode de requête qui définit par attribut.

Maintenant, pourquoi il est appelé deux fois: Puisque vous avez appelé l'action TechniciansProductivityDetails dans $ .post et window.open, c'est pourquoi il est appelé deux fois. Maintenant, si l'intention ici est de montrer les détails ne puis changer comme suit:

[HttpGet] 
    public ActionResult TechniciansProductivityDetails(string techId) 
    { 
     return View("TechniciansProductivity/TechniciansProductivityDetails", GetTechniciansProductivityDetailsModel(techId)); 
    } 


function Details(id) { 
     window.open('@Url.Action("TechniciansProductivityDetails")?techId=' + id, 'popUpWindow', 'height=400, width=650, left=300, top=100, resizable=yes, scrollbars=yes, toolbar=yes, menubar=no, location=no, directories=no, status=yes'); 
    }); 
} 
+0

Dit que le nom 'id' n'existe pas dans le contexte ... –

+0

Changez le code en "@ Url.Action (" TechniciansProductivityDetails ")? TechId = '+ id''. Essayez-le à nouveau avec le code mis à jour. – user1672994

+0

Mais c'est obtenir, pas poster ... –