Wie um zu überprüfen, ob client-script bereits registriert wurde, während eine partielle postback
Unten ist der code, den ich habe derzeit umgesetzt.
if (!Page.ClientScript.IsStartupScriptRegistered(Page.GetType(), scriptKey))
{
ScriptManager scriptManager = ScriptManager.GetCurrent(page);
if (scriptManager != null && scriptManager.IsInAsyncPostBack)
{
//if a MS AJAX request, use the Scriptmanager class
ScriptManager.RegisterStartupScript(Page, Page.GetType(), scriptKey, script, true);
}
else
{
//if a standard postback, use the standard ClientScript method
Page.ClientScript.RegisterStartupScript(Page.GetType(), scriptKey, script, true);
}
}
Mache ich wie vorgeschlagen in diese Antwort, damit kann ich mich anmelden-startup-Skript auf beiden Zeiten also, wenn es partielle Postbacks und einem vollständigen postback.
Das problem ist Page.ClientScript.IsStartupScriptRegistered(Page.GetType(), scriptKey)
immer (auch, wenn das script vorher registriert) gibt false zurück, wenn es partielle postback. Und ich konnte Sie nicht finden, ScriptManager.IsStartupScriptRegistered (statische) Methode. Als Ergebnis dieser, ein zusätzliches Skript wird abgegeben, auf der alle partiellen/asynchrone postbacks.
Bitte beachten Sie, dass ich mit script manager von AjaxControlToolkit, version 4.1, d.h. ToolkitScriptManager
in meiner masterpage. Aber ich weiß nicht, was es hat etwas mit diesem zu tun.
UPDATE
<asp:UpdatePanel ID="ContactDetailsUpdatePanel" UpdateMode="Conditional" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="UpdateContactDetailsButton" EventName="Click" />
</Triggers>
<ContentTemplate>
<div id="ContactDetailsContent" class="contact_details_content">
<div class="customer_contactdetails_left_pane">
<div class="customer_name_field">
<asp:Label ID="CustomerNameLabel" runat="server" Text="Customer" />
<asp:TextBox ID="CustomerNameValue" runat="server" />
</div>
<div class="customer_address_field">
<asp:Label ID="CustomerAddressLabel" runat="server" Text="Address" />
<asp:TextBox ID="CustomerAddressValue" runat="server" />
<asp:TextBox ID="CustomerAddressValue1" runat="server" />
<asp:TextBox ID="CustomerAddressValue2" runat="server" />
<asp:TextBox ID="CustomerAddressValue3" runat="server" />
</div>
<div class="customer_postcode_field">
<asp:Label ID="CustomerPostcodeLabel" runat="server" Text="Postcode" />
<asp:TextBox ID="CustomerPostcodeValue" runat="server" />
</div>
</div>
<div class="customer_contactdetails_right_pane">
<div>
<asp:Label ID="CustomerContactLabel" runat="server" Text="Contact" />
<asp:TextBox ID="CustomerContactValue" runat="server" />
</div>
<div>
<asp:Label ID="CustomerTelephoneLabel" runat="server" Text="Telephone" />
<asp:TextBox ID="CustomerTelephoneValue" runat="server" />
</div>
<div>
<asp:Label ID="CustomerMobileLabel" runat="server" Text="Mobile" />
<asp:TextBox ID="CustomerMobileValue" runat="server" />
</div>
<div>
<asp:Label ID="CustomerFaxLabel" runat="server" Text="Fax" />
<asp:TextBox ID="CustomerFaxValue" runat="server" />
</div>
<div>
<asp:Label ID="CustomerEmailLabel" runat="server" Text="Email" />
<asp:TextBox ID="CustomerEmailValue" runat="server" />
</div>
<div>
<asp:Label ID="CustomerWebLabel" runat="server" Text="Web" />
<asp:TextBox ID="CustomerWebValue" runat="server" />
</div>
</div>
</div>
<div class="update_button_field">
<asp:Button ID="UpdateContactDetailsButton" runat="server" Text="Update"
onclick="UpdateContactDetailsButton_Click" />
</div>
</ContentTemplate>
</asp:UpdatePanel>
Vielen Dank im Voraus.
HINWEIS: in der Lage sein zu verstehen, den Fortschritt auf diesem problem, siehe die Kommentare auf diese beantworten, bevor Sie Antworten.
UPDATE
Ich habe implementiert eine temporäre Lösung für dieses problem, indem Sie ein Häkchen in der javascript, dass, wenn das Skript bereits ausgeführt, dann führen nicht zweimal. Javascript ist immer noch aufgespießt mehrmals auf jede partielle postback. Konnte es nicht verhindern.
Als der Blick auf diese post erhöht sich, ich kann sehen, dass es andere Menschen, die vielleicht wollen Sie auch Antwort auf dieses problem.
InformationsquelleAutor der Frage IsmailS | 2010-05-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie mit dieser;
Dann zu überprüfen, ob es registriert wurde, müssen Sie dieses verwenden:
if (Page.ClientScript.IsClientScriptBlockRegistered("noPasswordMatch"))
funktioniert nicht!InformationsquelleAutor der Antwort Dave
Ich lief in das gleiche Problem beim schreiben eines zusammengesetzten Steuerelements in ASP.Net. Bei der Kontrolle wurde im inneren ein update-panel-Seite.ClientScript.IsStartupScriptRegistered nicht funktioniert. Innerhalb der Methode protected override void CreateChildControls() ich war etwas wie
Also lief ich in eine situation ähnlich dem, was Sie hier beschreiben. Was mein problem gelöst war vorbei, die Kontrolle und den Typ anstelle von der Seite und von-Seite-Typ zu ScriptManager.RegisterStartupScript. Also der code sieht jetzt,
Einmal habe ich diese Veränderung, die ich nicht mehr benötigt, um zu überprüfen Seite.ClientScript.IsStartupScriptRegistered. Jetzt meine Steuerung funktioniert mit oder ohne update-panels. Keine unnötigen js spitouts. Hoffe, das hilft
InformationsquelleAutor der Antwort Harindaka
Hatte ich implementiert eine temporäre Lösung für dieses problem, indem Sie ein Häkchen in der javascript, dass, wenn das Skript bereits ausgeführt, dann führen nicht zweimal. Javascript ist immer noch aufgespießt mehrmals auf jede partielle postback. Konnte es nicht verhindern.
InformationsquelleAutor der Antwort IsmailS
Ich geschrieben habe eine Erweiterung Methode um zu überprüfen, ob das script bereits registriert wurde mit dem ScriptManager. Sie können das gleiche Prinzip anwenden, um zu überprüfen, startup-scripts:
InformationsquelleAutor der Antwort Phil Hale
Denken Sie daran, Ihre erste Zeile code, die inverse der Rückgabewert der Methode, weil der
!
.Wenn
IsStartupScriptRegistered
zurückfalse
wie du sagst, dann ist die if-Anweisung prüfen solltrue
wegen der!
. Dies sollte dazu führen das Skript registriert werden, wie erwartet.Dein code basiert auf meine Antwort hierbasierend auf ASP.NET AJAX 1.0 und ASP.NET 2.0. Kann es etwas damit zu tun haben .NET 3.5, obwohl ich glaube, ich habe das oben schon in einem neueren Projekt haben wir unter 3,5 und es hat funktioniert...
Können Sie nach ein paar markup zu gehen mit dem code?
EDIT: Dank für die Buchung der markup.
Merke ich 2 Dinge jetzt:
Erwähnten Sie, dass Sie mit
ToolkitScriptManager
. Es ist eine Steuerung, die erbt von ScriptManager. Ich bemerkte nicht das vor, aber Ihr code ist noch immer auf ScriptManager direkt. Sie sagte, es war während asynchrone postbacks, dass das Skript nicht funktioniert, das führt mich zu glauben, es ist ein Problem mit Ihrem Verweis auf ScriptManager. Ich habe noch nie verwendet ToolkitScriptManager vor, so dass ich kann Ihnen nicht den genauen code, aber ich kann Ihnen sagen, dass Sie wahrscheinlich benötigen, um zu aktualisieren Sie Ihre code-behind ändern Sie alle Verweise auf ScriptManager-Steuerelement und seine Eigenschaften/Methoden, um den Gegenwert in ToolkitScriptManager.Versuchen, indem Sie einen Haltepunkt auf die if-Anweisung, und stellen Sie sicher, es ist Beurteilung zu wahren. Ich wäre nicht überrascht, wenn
scriptManager
istnull
oderscriptManager.IsInAsyncPostBack
istfalse
weil manToolkitScriptManager
.Schließlich - markup sieht okay aus, außer Sie nicht brauchen, die
<Triggers>
Abschnitt. Trigger können Sie festlegen, die Steuern, welche außerhalb der update-panel zu verursachen, teilweise rendert. Jedes Kind Kontrolle über das update-panel innerhalb der<ContentTemplate>
Abschnitt wird dies automatisch tun. Die Taste, die Sie sind targeting in der Trigger-Sektion ist bereits in das updatepanel. Während ich glaube nicht, dass dies die Ursache für dein Problem, würde ich entfernen Sie es trotzdem.Hoffe, das hilft.
InformationsquelleAutor der Antwort KP.
Meinst du diesen: ClientScriptManager.IsStartupScriptRegistered Methode
InformationsquelleAutor der Antwort egrunin