Peter
Peter

Reputation: 11

Angle Brackets in Page head element

Iam new to ASP.NET with prev. PHP experience (which meaby is causing this problem) and Iam having small problem passing data from codebehind to view-source.

I declared string variable on codebehind side such as:

    ...
    public string mystring = "Scotty";
    protected void Page_Load(object sender, EventArgs e)
    {
      ...

So now I want to use it in view-code but when I put it in angle brackets (<%: or <%=) and put it in head element I got no access to this value. On the other hand when I put it in BODY element everything is ok. My failing example (simplified):

 <head runat="server">
   <script language="javascript">
      function beamMeUp()
      {
              alert(<%=mystring;%>);
      }
   </script>
 </head>
 <body>
     <input type="button" onclick="javascript:beamMeUp" value="Warp6" />
 </body>

Can anyone explain it to me why I can't use it (the <%=mystring;%>) in HEAD but i can use it in BODY ? Best regards

Upvotes: 1

Views: 491

Answers (3)

Sam
Sam

Reputation: 27364

You really had three problems:

1.) You have a javascript error as pointed out by the first responder when he told you to use:

alert("<%=mystring %>");

2.) You have an ASP .NET error because you can't use <%= %> inside a tag that has runat="server".

3.) Another javascript error in your onclick assignment. Note it is better to wire up events in code using attachEvent and addEventListener. Your onclick assignment does not need the javascript: in front. You might do this for an href attribute, but not an onclick. In the onclick, you are already executing javascript. You could have onclick="alert('yo!')" which would work. Also, when executing a function, you must include the parenthesis, so you should have onclick="beamMeUp();" (semi colon optional).

Your revised code should look more like:

<head>  <!-- notice runat="server" has been removed -->
   <script type="text/javascript">
      function beamMeUp()
      {
              alert("<%=mystring;%>");
      }
   </script>
</head>
 <body>
     <input type="button" onclick="beamMeUp();" value="Warp6" />
 </body>

Note: I tried the code above and it works. I made these changes

  • removed runat="server" from the <head> tag
  • added double quotes to alert("<%=mystring;%>");
  • changed onclick event to onclick="beamMeUp();" NOT onclick="javascript:beamMeUp".

Good luck.

Upvotes: 0

Sam
Sam

Reputation: 27364

Your problem may be that you have

<head runat="server">...

I believe this causes ASP .NET to construct an HtmlHead object which you can reference from Page.Head. However, you cannot have inline constructs such as <% .. %> and <%= %> when doing this. I believe this is also true of other ASP .NET controls such as

<asp:TreeView ...> <asp:TreeViewItem> <%= will cause error! %> </asp:TreeViewItem </asp:TreeView>

http://geekswithblogs.net/mnf/archive/2007/11/14/code-render-blocks-not-always-work-inside-server-controls.aspx

Upvotes: 0

hunter
hunter

Reputation: 63532

The semicolon isn't necessary when using <%=. Think of it as writing:

<% Response.Write(mystring); %>

You will want to wrap that in quotes as well.

alert("<%=mystring %>");

Without quotes would be: alert(Scotty);

which does not make much sense unless you have a javascript variable called Scotty. It should give you an alert box showing undefined

The code-behind variable mystring is available in the <head>. C# IntelliSense isn't displaying for it since it's inside of a <script> tag.

Upvotes: 5

Related Questions