14

https://i.stack.imgur.com/dVjHt.jpg

enter image description here

I never understood the real usage of the Control , type,key usages of this class.

In general Ive always used with : this , GetType() , "xx"

but now I truly want to understand .


msdn :

Control : " the control that is registering the client script"

so...? what difference does it makes who registered it ? the script will be in the head of the page...

Type: "the type of the client script block"

type ??? its javascript. why does he want another type from me ?

Key: "a unique indentifier"

That I can understand - for cases which later to remove... but I'd love for some more advanced explanations

Can I have please , a real life scenario in which I TRULY have to play with those params ?

Royi Namir
  • 144,742
  • 138
  • 468
  • 792

3 Answers3

3

the most important part is Control which control in html tags you want to register the script for example if you have user control and you want to run the script just for that use this line

ScriptManager.RegisterStartupScript(this, this.GetType(), "alertscript", "document.getElementById('userControl_h1TAG')", true); 

but when you want to register the block and script to all part of that page use this line in CS code of user-control :

ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "alertscript", "document.getElementById('page_h1TAG')", true);
Mojtaba Pourmirzaei
  • 306
  • 1
  • 6
  • 17
  • 1
    Are you really sure about that? The javascript will have access to the whole html page, so you can access every element on the page even though you register it for the control. – Tomas Jansson Nov 29 '11 at 11:15
  • 1
    you are right but when you use UpdatePanel there will be problem [link](http://www.dotnetcurry.com/ShowArticle.aspx?ID=200) - – Mojtaba Pourmirzaei Nov 29 '11 at 11:31
1

The method System.Web.UI.ScriptManager.RegisterClientScriptBlock calls behind the scenes to the internal method System.Web.UI.ScriptRegistrationManager.RegisterClientScriptBlock that uses the parameter control to make a call to System.Web.UI.ClientScriptManager.RegisterClientScriptBlock by referencing control.Page.ClientScript.RegisterClientScriptBlock.

So, actually when you making a call like this:

MyScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alertScript", "alert('hi')", true);

It's identical to calling:

this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "alertScript", "alert('hi')", true);        

The type parameter comes handy when two different types trying to register scripts with identical string keys.

  • So what makes the script unique ? the key ? or combination of type plus something ? and why the constructor wants from me the control && type ?? can you give a real life scenario ? – Royi Namir Nov 29 '11 at 09:54
  • The method `System.Web.UI.ClientScriptManager.RegisterClientScriptBlock` generates internally a new key based on the values of the parameters type and key. – Daniel Katz Nov 29 '11 at 09:59
  • what happens when two different types trying to register scripts with identical string keys? – Royi Namir Nov 29 '11 at 10:05
  • In such case ClientScriptManager registering TWO different script blocks with different keys. The key resolution works something like this: "TypeA_key", "TypeB_key". – Daniel Katz Nov 29 '11 at 10:08
  • I think we both are wrong.... its combination of the control+type and not tpye+key – Royi Namir Nov 29 '11 at 10:14
  • You can see for yourself. Here is a cite from the reflection of ClientScriptManager class: `this.RegisterScriptBlock(CreateScriptKey(type, key), script, ClientAPIRegisterType.ClientScriptBlocksWithoutTags);` – Daniel Katz Nov 29 '11 at 10:18
0

After looking on MSDN I found the method with slightly different parameters, but I think the answers should give you more insight: (http://msdn.microsoft.com/en-us/library/bb350750.aspx) :

Control: Client script blocks that are registered by using this method are sent to the page only when control represents a control that is inside an UpdatePanel control that is being updated.

Type: This parameter is usually specified by using the typeof operator (C#) or the GetType operator (Visual Basic) to retrieve the type of the control that is registering the script.

And I guess the key just is for making sure that one codeblock is not included twice? Or it gives you a warning if you use the same key again?

Royi Namir
  • 144,742
  • 138
  • 468
  • 792
Kolky
  • 2,917
  • 1
  • 21
  • 42