Come posso chiamare una funzione JavaScript all'interno di un metodo?
-
03-07-2019 - |
Domanda
Sono dentro ...
public class bgchange : IMapServerDropDownBoxAction
{
void IServerAction.ServerAction(ToolbarItemInfo info)
{
Some code...
e dopo " del codice " Voglio innescare
[WebMethod]
public static void DoSome()
{
}
Che attiva alcuni javascript. È possibile?
Ok, cambia metodo qui. Sono stato in grado di chiamare dosome (); che ha generato ma non ha attivato il javascript. Ho provato ad usare il metodo registerstartupscript ma non capisco bene come implementarlo. Ecco cosa ho provato:
public class bgchange : IMapServerDropDownBoxAction
{
void IServerAction.ServerAction(ToolbarItemInfo info)
{
...my C# code to perform on dropdown selection...
//now I want to trigger some javascript...
// Define the name and type of the client scripts on the page.
String csname1 = "PopupScript";
Type cstype = this.GetType();
// Get a ClientScriptManager reference from the Page class.
ClientScriptManager cs = Page.ClientScript;
// Check to see if the startup script is already registered.
if (!cs.IsStartupScriptRegistered(cstype, csname1))
{
String cstext1 = "alert('Hello World');";
cs.RegisterStartupScript(cstype, csname1, cstext1, true);
}
}
}
Ho ottenuto il codice registerstartupscript da un esempio msdn. Chiaramente non lo sto implementando correttamente. Attualmente vs dice " È necessario un riferimento a un oggetto per il campo, il metodo o la proprietà non statici "System.Web.UI.Page.ClientScript.get" in riferimento al pezzo di codice "Page.Clientscript; " Grazie.
Soluzione
Non sono sicuro di aver compreso appieno la sequenza di ciò che stai cercando di fare, cosa è il lato client e cosa no ....
Tuttavia, è possibile aggiungere un metodo javascript di avvio alla pagina che quindi chiamerebbe WebMethod. Quando si chiama un WebMethod tramite javascript, è possibile aggiungere una funzione di richiamata, che verrà quindi chiamata al ritorno di WebMethod.
Se aggiungi un tag ScriptManager alla tua pagina, puoi chiamare WebMethods definiti nella pagina tramite Javascript.
<asp:ScriptManager ID="scriptManager1"
runat="server" EnablePageMethods="true" />
Dalla funzione Page_Load puoi aggiungere una chiamata al tuo WebMethod ..
Page.ClientScript.RegisterStartupScript(
this.GetType(),
"callDoSome",
"PageMethods.DoSome(Callback_Function, null)",
true);
Callback_Function rappresenta una funzione javascript che verrà eseguita dopo che il WebMethod è chiamato ...
<script language="javascript" type="text/javascript">
function Callback_Function(result, context) {
alert('WebMethod was called');
}
</script>
EDIT:
Trovato questo link per Controlli ADF Web . È questo che stai usando ??
Da quella pagina, sembra che qualcosa del genere farà un callback javascript.
public void ServerAction(ToolbarItemInfo info) {
string jsfunction = "alert('Hello');";
Map mapctrl = (Map)info.BuddyControls[0];
CallbackResult cr = new CallbackResult(null, null, "javascript", jsfunction);
mapctrl.CallbackResults.Add(cr);
}
Altri suggerimenti
Se quanto sopra è come stai chiamando RegisterStartupScript, non funzionerà perché non hai un riferimento alla " Pagina " oggetto.
bgchange nel tuo esempio estende Object (supponendo che IMapServerDropDownBoxAction sia un'interfaccia), il che significa che non esiste un'istanza Page a cui puoi fare riferimento.
Questo hai fatto esattamente la stessa cosa da una pagina Asp.Net o UserControl, avrebbe funzionato, perché Page sarebbe un riferimento valido.
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Page.ClientScript.RegisterStartupScript(
this.GetType(),
"helloworldpopup",
"alert('hello world');",
true);
}
}
Non è possibile chiamare metodi all'interno di un browser direttamente dal server. Tuttavia, puoi aggiungere funzioni javascript alla risposta che eseguirà i metodi all'interno del browser.
All'interno del metodo ServerAction, eseguire le seguenti operazioni
string script = "<script language='javascript'>\n";
script += "javascriptFunctionHere();\n";
script += "</script>";
Page.RegisterStartupScript("ForceClientToCallServerMethod", script);
hmmm ... la domanda è cambiata radicalmente dalla mia risposta originale.
Ora penso che la risposta sia no. Ma potrei sbagliarmi.