【问题标题】:Ad Hoc Styles in WebControlWebControl 中的 Ad Hoc 样式
【发布时间】:2011-06-27 06:06:11
【问题描述】:

我正在创建一个在我的几个 ASP.NET 页面中使用的 WebControl。在一种情况下,我想添加一些特别的样式属性,例如 WidthFloat

由于我无法预料将来会需要哪些属性,我希望使用控件的标记能够添加任何随机样式。我有控件,所以它支持ColorWidth 等标准样式,但不支持Float

有没有办法允许在标记中指定这些属性并让它们原封不动地传播到呈现的控件?我不想创建自己的自定义 Float 属性和任何其他可能需要的样式。

我尝试只在标记中添加style="...",但这只是简单地被剥离并且不会出现在呈现的控件中的任何位置。

【问题讨论】:

    标签: asp.net web-controls


    【解决方案1】:

    我之前的回答是关于用户控制的,我的错!

    对于 WebControl,您可以覆盖 AddAttributesToRender 方法。

    以下似乎工作得很好:

        [Bindable(true)]
        [Category("Appearance")]
        [DefaultValue("")]
        [Localizable(true)]
        public string style
        {
            get
            {
                String s = (String)ViewState["style"];
                return ((s == null) ? String.Empty : s);
            }
    
            set
            {
                ViewState["style"] = value;
            }
        }
    
        protected override void AddAttributesToRender(HtmlTextWriter writer)
        {            
    
            base.AddAttributesToRender(writer);
            if(!string.IsNullOrEmpty(style))
            {
                writer.AddAttribute(HtmlTextWriterAttribute.Style, style);
            }
    
        }
    

    编辑:将公共属性更改为“样式”以利用智能。

    【讨论】:

    • 我有这个工作,但这是一种有趣的方法,可以解决我的一些问题和疑虑。
    【解决方案2】:

    我会向您的 WebControl 添加一个 CssClass 属性。这将允许任何使用您的控件的页面提供自己的外观。

    【讨论】:

    • 但只能通过指定一个类,对吧?而不是特别风格?此外,该控件实际上显示 AddThis 按钮,这些按钮有自己的 class 属性。
    • 正确,没有 Ad-Hoc 样式。 CSS 类解决方案允许您未来的自己应用任何新样式(以临时方式),而无需修改您的控件。
    • 是的,我找到了浮动的解决方法:只需包含 <DIV>。 CssClass 很复杂,因为控件本身必须使用特殊的类属性。
    【解决方案3】:

    它可能不是你要找的,但如果你有一个周围的元素,你可以按照以下方式将样式应用为字符串:

    .ascx

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="HubbInvestor.WebUserControl1" %>
    <div style="<%=AdHocStyle%>">
        Some Text:
        <asp:Button ID="Button1" runat="server" Text="A Button" />
    </div>
    

    .ascx.cs

    public partial class WebUserControl1 : System.Web.UI.UserControl
    {
        private string adHocStyle = string.Empty;
    
        public string AdHocStyle
        {
            get { return adHocStyle; }
            set { adHocStyle = value; }
        }
    
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }
    }
    

    当然,你不会在样式上获得任何好的智能完成

    【讨论】:

    • 该死!你在我输入 D'oh 时添加了一条评论!
    • 谢谢,但我没有使用 ASCX 文件。我编写了一个派生自 WebControl 的类。
    猜你喜欢
    • 2014-10-03
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多