Am I injecting this correctly?
string myScriptName = "EventScriptBlock";
string myScript = string.Empty;
//Verify script isn't already registered
if (!ClientScript.IsClientScriptBlockRegistered(myScriptName))
{
Response.Write('b');
myScript = "n<script type="text/javascript" language="Javascript" id="EventScriptBlock">n";
myScript += "alert('hi');";
myScript += "nn </script>";
ClientScript.RegisterClientScriptBlock(this.GetType(), myScriptName, myScript);
}
This is in my Page_Load, but I never see an alert and I have no JavaScript errors either.
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
You can use registerstartupscript instead of registerclientscriptblock!
RegisterStartupScript
When you use RegisterStartupScript, it will render your script after all the elements in the page (right before the form’s end tag). This enables the script to call or reference page elements without the possibility of it not finding them in the Page’s DOM
RegisterClientScriptBlock
When you use RegisterClientScriptBlock, the script is rendered right after the Viewstate tag, but before any of the page elements. Since this is a direct script (not a function that can be called, it will immediately be executed by the browser. But the browser does not find the label in the Page’s DOM at this stage and hence you should receive an “Object not found” error
Difference between registerstartupscript and registerclientscriptblock
protected void Page_Load(object sender, System.EventArgs e)
{
string myScript = "n<script type="text/javascript" language="Javascript" id="EventScriptBlock">n";
myScript += "alert('hi');";
myScript += "nn </script>";
Page.ClientScript.RegisterStartupScript(this.GetType(), "myKey", myScript, false);
}
Method 2
I have a feeling this is related to your asp.net/html markup.
Do you have a form tag like so in your .aspx file?
<form id="form1" runat="server"> .... </form>
Method 3
Both RegisterStartupScript and RegisterClientScriptBlock will work.
Problem lies in myScript (string variable).In myScript variable you need to use alert variable only, as whenever you use this, script tag will be added automatically to your page’s HTML at runtime. To check this right on your page and see the source of the page.
protected void Page_Load(object sender, EventArgs e)
{
string myScript = string.Empty;
//myScript = "n<script type="text/javascript" language="Javascript" id="EventScriptBlock">n";
string registerKey = "alert('RegisterClientScriptBlock');";
myScript = "alert('RegisterStartupScript');";
Page.ClientScript.RegisterStartupScript(this.GetType(), "RegisterStartupScript", myScript, true);
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "RegisterClientScriptBlock", registerKey, true);
}
Note: I have executed RegisterStartupScript first and than RegisterClientScriptBlock.But RegisterStartupScript alert will be executed at last, as it will be added at the end of the page.
RegisterClientScriptBlock will always be added at the starting of the page.
Method 4
You should use RegisterStartupScript.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0