Di seguito è riportato il codice attualmente implementato.Come verificare se lo script client è già registrato durante un postback parziale
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);
}
}
che sto facendo come suggerito in this risposta in modo che possa registrare script di avvio su entrambe le volte cioè quando c'è postback parziale e un postback completo.
Il problema è Page.ClientScript.IsStartupScriptRegistered(Page.GetType(), scriptKey)
sempre (anche quando lo script è registrato prima) restituisce false quando si tratta di postback parziale. E non sono riuscito a trovare il metodo ScriptManager.IsStartupScriptRegistered (statico). Di conseguenza, uno script aggiuntivo viene emesso su tutti i postback parziali/asincroni.
Si noti che sto utilizzando lo script manager di AjaxControlToolkit versione 4.1, ovvero ToolkitScriptManager
nella mia pagina principale. Ma non ho niente a che fare con questo.
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>
Grazie in anticipo.
NOTA: Per essere in grado di comprendere i progressi su questo problema, vedere i commenti sulla risposta this prima di rispondere.
UPDATE
Ho implementato una soluzione temporanea a questo problema mettendo un controllo in javascript che se lo script è già in esecuzione, allora non lo esegue due volte. Javascript viene ancora sputato più volte su ogni postback parziale. Non posso impedirlo.
Mentre le visualizzazioni di questo post sono in aumento, posso vedere che ci sono altre persone che potrebbero anche voler rispondere a questo problema.
Per informazioni sull'intero problema, visitare http://stackoverflow.com/questions/1952817/asp-net-javascript-inside-ajax-updatepanel/1953122#1953122. Page.ClientScript.IsStartupScriptRegistered() mi fornisce solo http://msdn.microsoft.com/en-us/library/62d1676x.aspx. E restituisce sempre false in caso di post backs parziali. – IsmailS
Ho aggiunto markup ora. – IsmailS
Questo non mi ha aiutato. Non so chi abbia votato. Sto già usando questo metodo ed è menzionato nella mia domanda. – IsmailS