用户控件是否可以在用户控件中嵌入自己的CSS样式?

时间:2010-10-15 09:50:49

标签: asp.net

你可以在ascx页面上放置CSS样式块(即<style type="text/css">...</style>),以便设置用户控件的样式吗?我尝试了它,它的工作原理。但是我想知道这是否是一种常见的做法,问题是样式块被插入到用户控件所在的最终HTML权限中。我的理解是样式块应该在前面的<head></head>标签之间。所以它似乎不合适。 BTW可以将javascripts放在HTML上的任何位置吗?

4 个答案:

答案 0 :(得分:2)

我在head标签中有runat =“server”,然后你可以动态地添加CSS或Script tages。

Dim lt as New Literal()
lt.Text = "<style type='text/css'>styles......</style>"
Page.Header.Controls.Add(lt)

lt = New Literal()
lt.Text = "<script type='text/javascript'>scripts.....</script>"
Page.Header.Controls.Add(lt)

答案 1 :(得分:1)

Javascript标签几乎可以放在任何地方。头部接缝就像放置它的合理位置,但有些人建议将它放在</body>之前的最底部。这样,您的页面内容应该加载更快,并可能改善搜索引擎优化。

样式表一定应放在<head>中,因为这是W3C的建议。 使用样式表时,请将Tim的建议隐藏起来,或者更好地使用外部.css文件。

答案 2 :(得分:0)

是的,<style>标记和<script>标记可以插入html中的任何位置。它必须不必在<head></head>。请注意,浏览器从上到下加载html。如果在声明<style>引用之前在html 中为特定控件指定css类,则可能无法获得所需的样式效果。 <script>也是如此。

答案 3 :(得分:0)

使用这些辅助方法,我将其作为静态方法存储在全局可访问的HTMLHelper类中:

/// <summary>Register a CSS block in HEAD</summary>
/// <param name="page">A reference to the current Page instance (usually this.Page from a page or control)</param>
/// <param name="id">An ID used to track if this style block has been added before or not. Must be a unique ID in the HTML</param>
/// <param name="cssText">The CSS text</param>
public static void RegisterCSSBlock(System.Web.UI.Page page, string id, string cssText)
{
    if (page != null && page.FindControl(id) == null)
    {
        HtmlGenericControl css = new HtmlGenericControl();
        css.ID = id;
        css.TagName = "style";
        css.Attributes.Add("type", "text/css");
        css.Controls.Add(new LiteralControl(cssText));
        page.Header.Controls.Add(css);
    }
}

这很容易适应CSS文件(而不是代码)。您不需要为JavaScript调整它,因为内置的ClientScriptManager方法已经很好地处理了这个问题。