2009-02-25 46 views
6

Tôi cần phải thêm vào trang từ trong một điều khiển tùy chỉnh. Tôi không thể sử dụng một stylesheet (.css) bởi vì tôi đang sử dụng một url (...) và cần phải giải quyết url.ASP.NET 2.0 thêm kiểu động vào trang trong điều khiển

Ngay bây giờ tôi đang làm:

Page.Header.Controls.Add(new LiteralControl("<style type='text/css'>.xyz { color: blue; }</style>")); 

Nhưng tôi hy vọng cho một cái gì đó một cảm ứng thanh lịch hơn?

Trả lời

3

Tôi đoán đó không phải là giải pháp tồi cho vấn đề. Nếu bạn đã có một bên ngoài kiểu tập tin, đoạn mã này sẽ làm việc:

HtmlLink cssRef = new HtmlLink(); 
cssRef.Href = "styles/main.css"; 
cssRef.Attributes["rel"] = "stylesheet"; 
cssRef.Attributes["type"] = "text/css"; 
Page.Header.Controls.Add(cssRef); 

ý tưởng khác là để viết riêng ASP.NET ServerControl "HtmlInlineStyle" của bạn, vì vậy bạn có thể gọi nó theo cách này (thẻ script sẽ được thực hiện bằng cách điều khiển máy chủ của bạn):

Page.Header.Controls.Add(
    New HtmlInlineStyle(".xyz { width:300px;padding-left:10px }"); 

này blog entry và các ý kiến ​​cho thấy một số lựa chọn thay thế (ScriptManager.RegisterClientScriptBlock). Nhưng theo ý kiến ​​của tôi thì giải pháp của bạn vẫn ổn.

+0

HtmlInlineStyle là gì? Tôi không thể tìm thấy lớp này. –

+0

@AntonPutov Không có lớp như vậy trong khuôn khổ .NET. Đó là một gợi ý để viết kiểm soát máy chủ của riêng bạn. – splattne

1

Dưới đây là một cách khác ... Ví dụ:

Chánh ASPX phần:

<div id="div1" class="xyz" style="width: 40px; height: 40px;"> 
    <span>abc</span> 
</div> 

Trong Control:

Dim xyzStyle As New Style() 
xyzStyle.CssClass = "xyz" 
xyzStyle.BackColor = Drawing.Color.LightBlue 
Page.Header.StyleSheet.CreateStyleRule(xyzStyle, Nothing, ".xyz") 

Lưu ý rằng điều này giả định rằng các trang ASPX cha mẹ có thuộc tính lớp được đặt cho điều khiển đích. Nếu không, bạn sẽ cần phải hợp nhất kiểu với điều khiển bằng phương pháp MergeStyle. (Điều này yêu cầu sự kiểm soát là runat="server").

Mã này làm cho đầu ra sau đây: (Hiển thị toàn bộ nguồn thuận tiện cho bạn)

<html> 
<head> 
    <title>Untitled Page </title> 
    <style type="text/css"> 
    .xyz { background-color:LightBlue; } 
    </style> 
</head> 
<body> 
    <form name="form1" method="post" action="MyPage.aspx" id="form1"> 
    <div id="div1" class="xyz" style="width: 40px; height: 40px;"> 
     <span>abc</span> 
    </div> 
    </form> 
</body> 
</html> 
+1

Vâng ... Tôi đã tìm thấy CreateStyleRule nhưng thực sự khó chịu khi thấy rằng nó không cung cấp một cách để cung cấp thêm một "phong cách" chuỗi thiết lập. Các thuộc tính phong cách mà tôi cần hầu như không phải là một phần của đối tượng Style(). – user53794

+0

Hmmm ... khá đúng. Tôi đã không tìm thấy một cách xung quanh vấn đề đó. – Cerebrus

0

tôi tạo lớp của riêng tôi và kế thừa Style, với từ điển của riêng mình cho thuộc tính lớp mặc định phong cách không bao gồm. Dưới đây là ví dụ ngắn gọn ...

   protected override void FillStyleAttributes(CssStyleCollection attributes, IUrlResolutionService urlResolver) 
    { 
     Dictionary<String, String> _styles = new Dictionary<string, string>(); 
     _styles.Add("display", "inline-block"); 
     foreach (String s in _styles.Keys) 
     { 
      attributes[s] = (String)_styles[s]; 
     } 
     base.FillStyleAttributes(attributes, urlResolver); 
    } 
Các vấn đề liên quan