2009-12-07 5 views

Antwort

40

ASPX:

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

Client-seitiges Script:

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

PS: Ich habe es nicht getestet, aber ich habe getan somthing ähnlich vor und es funktioniert.

+1

Als eine Angelegenheit oder Vorliebe füge ich runat = "server" zu der versteckten Eingabe hinzu und ändere ihren Wert in der Codebehind-Datei, aber das funktioniert gut. Und ich würde jQuery empfehlen, das Javascript zu machen, denn das würde bedeuten: function isPostBack() {return $ ("#_ ispostback"). Val() == 'true';} –

+0

@Shhnap: Ja stimme ich zu. Nur ein fauler Ausweg für mich: P –

+6

Warum stören Einfügen eines '' Elements? Sie könnten einfach haben, dass isPostBack() direkt den Wert von Page.IsPostBack zurückgibt: 'return <% = Page.IsPostBack%>;' – RickNZ

0

Sie können das Postback nur verfolgen, wenn Sie AJAX-Anfragen verwenden oder ein verstecktes Feld irgendeiner Art haben, die das Javascript beim Laden der Seite liest. Andernfalls wird die Seite neu generiert und alle POST-Daten gehen verloren. wie Sie es erwarten und hoffen.

4

Siehe folgende:

<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

Ich liebe Ihre Wahl der Namen . – pqsk

+0

Dieser Code macht keinen Sinn. 'chkPostBack' ist eine Zeichenkettenvariable ... – pkr298

8

Wenn Sie prüfen möchten, ob die aktuelle Seite ein Postback sein wird, wenn der Benutzer auf eine Schaltfläche zum Senden klickt, können Sie auf das Vorhandensein von Viewstate überprüfen:

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

Sie können etwas wie document.getElementById("__VIEWSTATE") oder das jQuery-Äquivalent verwenden.

Wenn Sie jedoch sehen möchten, ob die aktuelle Seite als Antwort auf ein Postback generiert wurde, müssen Sie diese Daten zuerst in die Seite auf der Serverseite einfügen.

Zum Beispiel:

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

Da gehen Sie. +1 :) –

+0

Dies fällt, wenn Sie keinen Zugriff auf serverseitigen Code haben und Codeblöcke nicht erlaubt sind. –

+0

Merkwürdig ist, dass das nicht für mich arbeiten, aber dies tut: \t \t \t Funktion IsPostBack() { \t \t \t \t var ret = '<% = Page.IsPostBack%>' == 'True'; \t \t \t \t retour ret; \t \t \t} – Zeek

17

In einigen Fällen können Sie für Postbacks ohne serverseitigen Code überprüfen möchten. Beispielsweise können Sie in SharePoint keine Codeblöcke in SharePoint Designer-Seiten haben, sodass Sie keine Lösung verwenden können, die % = etwas%> erfordert. Hier ist eine Alternative, die keine serverseitigen Code beinhaltet:

<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> 

Eine Einschränkung (oder Funktion, je nachdem, wie man es betrachtet), wird dies erkennen nicht nur Postbacks, aber jeder Fall, in dem die Seite Links zu sich selbst .

+0

Dies funktioniert für SharePoint 2010 - JavaScript in einer Liste. – FAA

+0

Es funktioniert in einigen Fällen. – Shawn

+0

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

5

Da JavaScript sollte nicht mit serverseitigen Code geschrieben werden, und neue Elemente in der Seite Injektion scheint übertrieben, so scheint es mir, dass die einfachste Lösung [datat-*] Attribute zum <head> Elemente hinzuzufügen ist:

in Page_Load:

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

Dies kann dann als zugegriffen werden

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

Natürlich, wenn Sie das [data-is-postback] Attribut als Boolesche Attribut behandeln, können Sie alternativ verwenden:

In 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

Das ist zwar großartig, wenn Sie auf den serverseitigen Code zugreifen, fällt jedoch nicht. Einige Software erlaubt nicht einmal Code-Blöcke, so dass eine reine JavaScript-Lösung benötigt wird. –

0

Hier Lösung jQuery:

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

Ich habe eine Lösung, die für mich gearbeitet.

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

es funktioniert nur für Ajax async Anfragen – devi

0

auf Page_Load auf Ihrer Server-Seite: Im Folgenden verwendet eine Überlastung der Registerclient(), die unsere Zeichenfolge mit den benötigten Script-Tags

Server-Side

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

Dann umgeben wird Überprüfen Sie in Ihrem Skript, das für onLoad ausgeführt wird, ob diese Variable vorhanden ist.

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

Verwendung bodyonloadfunc Postback auf Client-Seite zu überprüfen

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

Betrachten Sie eine erweiterte Antwort. – Sam

+0

@Sam bodonloadfunc ist eine Javascript-Funktion, die es aufruft, wenn die Seite Postback ist. –

Verwandte Themen