问题
- I have a user control which has an update panel
- I am trying to execute a client side script from an async postback from a button inside the updatepanel
- I am using
ScriptManager.RegisterStartupScript
to execute the script but it never gets executed - The scriptmanager proxy is not inside the user control itself it is in the page containing the user control
- Is there any way round this problem?
Script registration:
ScriptManager.RegisterStartupScript(
this,
this.GetType(),
"CloseEdit",
"CloseEditModal();",
true
);
Thanks, Damien.
回答1:
The documentation to the ScriptManager.RegisterStartupScript Method (Control, Type, String, String, Boolean) (I assume you use this overload) says:
Startup script blocks that are registered by using this method are sent to the page only when the control that is registering the block is inside an
UpdatePanel
control that is being updated.
I assume you call the ScriptManager.RegisterStartupScript
method from your user control (which has an update panel as you said). This means the first parameter of the method is not inside an UpdatePanel
control that is being updated, so the script block is not registered. So changing your script registraction to:
ScriptManager.RegisterStartupScript(
btnUpdate,
btnUpdate.GetType(),
"CloseEdit",
"CloseEditModal();",
true
);
should solve your problem. btnUpdate
here is the button inside you UpdatePanel
that caused the postback (you mention this in paragraph 2).
来源:https://stackoverflow.com/questions/5593275/client-side-script-wont-execute-with-scriptmanager