2009-12-07 3 views

Répondre

40

ASPX:

<input type="hidden" id="_ispostback" value="<%=Page.IsPostBack.ToString()%>" /> 

script côté client:

function isPostBack() { //function to check if page is a postback-ed one 
    return document.getElementById('_ispostback').value == 'True'; 
} 

PS: Je l'ai pas testé, mais je l'ai fait somthing similaire avant et il fonctionne.

+1

De toute façon, j'ajoute runat = "server" à l'entrée cachée et change sa valeur dans le fichier codebehind mais cela fonctionne très bien. Et je recommanderais à jQuery de faire le javascript parce que cela deviendrait: function isPostBack() {return $ ("#_ ispostback"). Val() == 'true';} –

+0

@Shhnap: Oui, je suis d'accord. Juste un moyen paresseux pour moi: P –

+6

Pourquoi s'embêter à insérer un élément ''? Vous pourriez juste avoir isPostBack() retourner directement la valeur de Page.IsPostBack: 'return <% = Page.IsPostBack%>;' – RickNZ

0

Vous pouvez uniquement suivre la publication si vous utilisez des requêtes AJAX ou disposez d'un champ masqué que le javascript lit au chargement de la page. Sinon, la page est régénérée et toutes les données POST sont perdues; comme vous pouvez l'espérer et l'espérer.

4

Voir ci-dessous:

<script type="text/javascript"> 

function invokeMeMaster() { 

var chkPostBack = '<%= Page.IsPostBack ? "true" : "false" %>'; 

if (chkPostBack == 'false') { 

alert('Only the first time'); 

} 
} 



window.onload = function() { invokeMeMaster(); }; 

</script> 
+0

J'adore le choix de vos noms . – pqsk

+0

Ce code n'a aucun sens. 'chkPostBack' est une variable de chaîne ... – pkr298

8

Si vous voulez vérifier si la page en cours sera un postback si l'utilisateur clique sur un bouton d'envoi, vous pouvez vérifier la présence de ViewState:

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="xxxxx" /> 

Vous pouvez utiliser quelque chose comme document.getElementById("__VIEWSTATE") ou l'équivalent jQuery. Toutefois, si vous souhaitez voir si la page en cours a été générée en réponse à une publication, vous devez d'abord insérer ces données dans la page côté serveur.

Par exemple:

function isPostBack() { 
    return <%= Page.IsPostBack %>; 
} 
+0

Et voilà. +1 :) –

+0

Cela tombe si vous n'avez pas accès au code côté serveur et que les blocs de code ne sont pas autorisés. –

+0

Bizarrement, cela ne fonctionne pas pour moi, mais cela ne: \t \t \t fonction IsPostBack() { \t \t \t \t var ret = '<% = Page.IsPostBack%>' == 'vrai'; \t \t \t \t return ret; \t \t \t} – Zeek

17

Dans certains cas, vous pouvez vérifier postback sans code côté serveur. Par exemple, dans SharePoint, vous ne pouvez pas avoir de blocs de code dans les pages SharePoint Designer, vous ne pouvez donc utiliser aucune solution nécessitant <% = quelque chose%>. Voici une alternative qui ne comporte pas de code côté serveur:

<script type="text/javascript"> 
function isPostBack() 
{ 

    return document.referrer.indexOf(document.location.href) > -1; 
} 

if (isPostBack()){ 
document.write('<span style="color:red;">Your search returned no results.</span><br/>'); 
} 
</script> 

Une mise en garde (ou fonction, selon la façon dont vous regardez), ce détectera pas seulement postbacks, mais tous les cas où la page des liens vers lui-même .

+0

Cela fonctionne pour SharePoint 2010 - JavaScript dans une liste. – FAA

+0

Cela fonctionne dans certains cas. – Shawn

+0

var offset = document.location.href.indexOf (".aspx"); return document.referrer.substring (0, offset + 5) == document.location.href.substring (0, offset + 5) – Shawn

5

Comme JavaScript ne doit pas être écrit avec le code côté serveur, et l'injection de nouveaux éléments dans la page semble exagéré, il me semble que la solution la plus simple est d'ajouter [datat-*] attributs à l'élément <head>:

en Page_Load:
Page.Header.Attributes["data-is-postback"] IsPostBack ? "true" : "false"; 

Cela peut alors être accessible en tant que:

jQuery:
$('head').data('isPostback'); 
vanille JS:
document.head.getAttribute('data-is-postback') === 'true'; 

Bien sûr, si vous traitez l'attribut [data-is-postback] comme un attribut booléen, vous pouvez également utiliser:

En Page_Load:
if (IsPostBack) 
{ 
    Page.Header.Attributes.Add("data-is-postback", ""); 
} 
else 
{ 
    Page.Header.Attributes.Remove("data-is-postback"); 
} 
jQuery:
$('head').is('[data-is-postback]'); 
vanille JS:
document.head.hasAttribute('data-is-postback') 
+0

Bien que ce soit génial si vous accédez au code côté serveur, il tombe si vous ne le faites pas. Certains logiciels n'autorisent même pas les blocs de code, donc une solution JavaScript pure serait nécessaire. –

0

est la solution ici en utilisant jQuery:

$("a[href^='javascript:__doPostBack']").click(function() { 
    alert('ok'); 
}); 
4

J'ai une solution qui a fonctionné pour moi.

// Postback catch 
var prm = Sys.WebForms.PageRequestManager.getInstance(); 
prm.add_endRequest(function (s, e) { 
    alert("post back"); 
}); 
+0

cela fonctionne uniquement pour les requêtes ajax async – devi

0

sur Page_Load sur votre côté serveur: qui suit utilise une surcharge de RegisterClientScriptBlock() qui entourera notre chaîne avec les balises de script nécessaires

côté serveur

if (Page.IsPostBack){ 
    ClientScript.RegisterClientScriptBlock(GetType(), 
      "IsPostBack", "var isPostBack = true;", true); 
} 

Ensuite, Dans votre script qui s'exécute pour onLoad, vérifiez l'existence de cette variable.

if (isPostBack){ 
    //do something here 
} 
0

utilisation bodyonloadfunc pour vérifier postback côté client

function bodyonloadfunc() { 
alert("Postback"); 
} 
+0

Envisagez d'apporter une réponse plus étendue. – Sam

+0

@Sam bodonloadfunc est une fonction javascript qu'elle appelle quand la page est postback. –

Questions connexes