Inline code in head tag - ASP.NET

前端 未结 7 1052
旧巷少年郎
旧巷少年郎 2020-12-01 09:05

Is it possible to do something like this in a head tag, of master page, which has runatserver:

 

        
相关标签:
7条回答
  • 2020-12-01 09:25

    The reason the output is being rendered like so:

    href="<%=Config.ResourcesDomain %>/images/style.css"
    

    Is because ASP.NET is treating the link as an HtmlLink control, and rendering the contents of the href attribute as a literal.

    This is a strange quirk of marking the head section as a server control, where certain elements are treated as server controls (even without being marked explicitly with the runat="server" attribute).

    Removing the quotations around the href attribute resolves the issue:

    href=<%= Config.ResourcesDomain %>/images/style.css
    

    Doing so stops the link element being treated as a server control, thus executing the code block and rendering the correct URL.

    However, the above writes the href value out without quotes. Using the following, will add the quotes to the link tag:

    href=<%= String.Format("'{0}'", Config.ResourcesDomain) %>/images/style.css
    

    Hope this helps.

    Edit

    Strangely, if you use double quotes for the href attribute, and include double quotes within the code block this also resolves the issue:

    href="<%= "" + Config.ResourcesDomain %>/images/style.css"
    

    However, none of the above are particularly elegant solutions, and setting the URL from the code behind is probably the way to go.

    0 讨论(0)
  • 2020-12-01 09:31

    change it to

     <link rel="Stylesheet"  type="text/css" href='<%Response.Write(Config.ResourcesDomain); %>/images/style.css' />
    

    It should work

    0 讨论(0)
  • 2020-12-01 09:37

    Another solution I've found here: https://stackoverflow.com/a/5727996/368613 -- just place code inside PlaceHolder:

    <asp:PlaceHolder runat="server">
      ... your code with <%= %> tags ...
    </asp:PlaceHolder>
    
    0 讨论(0)
  • 2020-12-01 09:40

    Apparently data binding is required when using the inline tag "<%# %>".

    <head id="Head">
        //Stuff with inline code
    </head>
    

    Code Behind:

    protected void Page_Load {
        Head.DataBind();
    }
    

    Regards

    0 讨论(0)
  • 2020-12-01 09:42

    mark-up

    <head>
       <asp:Literal ID="litHead" runat="server" />
    </head>
    

    code-behind:

    on page_load

    litHead.Text = "<link rel='Stylesheet'  type='text/css' href='" + Config.ResourcesDomain + "/images/style.css' />";
    

    Update: do this then

    <head runat="server">
        <%
            Response.Write("<link rel='Stylesheet'  type='text/css' href='" + Config.ResourcesDomain + "/images/style.css' />");
        %>
        <title></title>
    </head>
    
    0 讨论(0)
  • 2020-12-01 09:42

    Or do something like this:

    <head>
        <style type="text/css">
            @import "<%= ResolveUrl("~/content/styles.css") %>";
            @import "<%= ResolveUrl("~/content/print.css") %>" print;
        </style>
    </head>
    
    0 讨论(0)
提交回复
热议问题