如何动态设置ASP.net listviewlayouttemplate的样式

本文关键字:net ASP listviewlayouttemplate 样式 设置 何动态 动态 | 更新日期: 2023-09-27 18:18:10

我希望能够将用户选择的颜色和字体大小应用到我的Listview的LayoutTemplate控件中,但不能使用代码块来调整样式(代码块在ItemTemplate中工作得很好)。我读过一些文章,说代码块在LayoutTemplate中不起作用(并且有它们不起作用的第一手经验)。有没有人有可靠的方法可以让我调整样式?我应该在一些事件处理程序中使用FindControl()并在那里添加样式吗?

如何动态设置ASP.net listviewlayouttemplate的样式

您可以尝试在LayoutTemplate中放置一个用户控件并将逻辑移动到该用户控件中,如下所示:

<asp:ListView ID="CustomizableList" runat="server">
  <LayoutTemplate>
    <custom:UserStyles runat="server" />
    <div class="user-list-layout">
      <asp:PlaceHolder ID="Item" />
    </div>
  </LayoutTemplate>
  <ItemTemplate>
    <asp:Label ID="Something" runat="server" 
      Text='<%# Eval("Something") %>' 
      CssClass="user-list-something" />
  </ItemTemplate>
</asp:ListView>

遵循Brian main的建议,只使用CSS类。然后在UserStyles控件中,你可以动态地生成一些将要应用的CSS。

<style type="text/css" scoped>
  .user-list-layout {
    border-color: <%= Profile.FavoriteColor %>;
  }
  .user-list-something {
    font-size: <%= Profile.PreferredFontSizeForSomething %>;
  }
</style>

请注意,在HTML中不允许将<style>标签添加到<body>,但在所有主要浏览器中都可以工作。这是允许在HTML5中,但只有scoped属性集(见这个问题的更多信息)。

任何用户可定制的东西,在设计时不是固定的,都需要通过找到适当的控件并更改CSS类来应用于ListView。或者,您可以尝试动态地编写CSS,以ListView中元素的类为目标,并纯粹使用CSS更改颜色。

EDIT:要动态输出CSS,请考虑使用像

这样的LiteralControl:
protected override void OnLoad(EventArgs e)
{
   var profile = GetProfile();
   LiteralControl ctl = new LiteralControl(@"
     <style>
         .UserStyleA 
         { 
            background-color: " + profile.BackgroundColor + @";
            color: " + profile.ForeColor + @";
     </style>");         
}

我相信然后onload,你可以添加到头部,比如:

this.Page.Header.Controls.Add(ctl);

但是,在阅读Page的文档时。属性,它有一个动态附加样式表的好例子。那似乎正是你所需要的。

http://msdn.microsoft.com/en-us/library/system.web.ui.page.header.aspx