2009-02-21 19 views
14

Bên ngoài được hưởng lợi từ thích ứng Rendering cho các thiết bị thay thế, không bao giờ làm cho tinh thần để viết tất cả các mã này:Có lợi ích gì khi sử dụng HtmlTextWriter nếu bạn không được hưởng lợi từ việc dựng hình thích nghi không?

writer.WriteBeginTag("table"); 
writer.WriteBeginTag("tr"); 
writer.WriteBeginTag("td"); 
writer.Write(HtmlTextWriter.TagRightChar); 
writer.WriteEncodedText(someTextVariable); 
writer.WriteEndTag("td"); 
writer.WriteEndTag("tr"); 
writer.WriteEndTag("table"); 

Khi StringBuilder có thể xây dựng các điều tương tự với chỉ đơn giản này:

sb.Append("<table><tr><td>"); 
sb.Append(someTextVariable); 
sb.Append("</td></tr></table>"); 
+0

Xem tại đây http: // stackoverflow.com/questions/489691/using-htmltextwriter-to-render-server-controls/489761 # 489761 –

Trả lời

12

Tôi có thể nghĩ hai lý do để sử dụng HtmlTextWriter: a) bạn có thể sử dụng trình ghi để theo dõi các thụt lề của mình, để HTML được xuất của bạn được định dạng độc đáo, thay vì xuất hiện trên một dòng và b) HtmlTextWriter thường được liên kết với luồng đầu ra, vì vậy nó sẽ hiệu quả hơn việc xây dựng một chuỗi dài trong bộ nhớ (tùy thuộc vào lượng HTML bạn đang tạo).

Không có lý do đặc biệt nào, nhưng chúng đủ thuyết phục tôi sử dụng tác giả khi cần thiết, hoặc nếu tôi viết một điều khiển cơ sở sẽ được sử dụng lại và phải chuyên nghiệp nhất có thể. Số dặm của bạn có thể thay đổi :-).

+0

hi Xin vui lòng giúp tôi, tôi muốn hiển thị đầu ra HTmltextwriter trên Mẫu email Outlook trên một cửa sổ mới. Khi tôi thử HTML các thẻ không hiển thị chính xác <43><41><12><25> Xin chào thế giới !!! ... những con số follwing không nên appear..please đề nghị – clarifier

2

Tại một thời điểm nào đó, bạn vẫn cần chuyển thông tin này tới HtmlTextWriter để hiển thị cho ứng dụng khách. Tôi đoán bạn sẽ có một writer.Write cuối cùng (sb.ToString()); trong đó trong ví dụ thứ hai. Những gì bạn có thể làm để giảm các dòng mã là viết HTML thô, chính xác giống như trong ví dụ StringBuilder thứ hai của bạn, nhưng thay vào đó sử dụng HtmlTextWriter.Write.

writer.Write("<table><tr><td>"); 
writer.Write(someTextVariable); 
writer.Write("</td></tr></table>"); 

Sau đó, sử dụng trình tạo StringBuilder có vẻ không cần thiết. Và, HtmlTextWriter sẽ, ít nhất là ở một mức độ nào đó, hãy đảm bảo HTML được tạo là tuân thủ (mặc dù điều đó không đúng trong trường hợp trên, khi viết HTML thô).

6

HtmlTextWriter là có lợi vì:

HtmlTextWriter là sạch nhất và mức tăng giá là độc đáo thụt vào khi nó được trả lại.

Có tác động hiệu suất như HtmlTextWriter ghi trực tiếp vào luồng đầu ra. Stringbuilder không ghi vào luồng đầu ra cho đến khi ToString được gọi trên nó.

Có một ví dụ về lý do bạn sẽ sử dụng HtmlTextWriter cho Saving and Reusing HTML Output tại đây.

+0

hi, tôi muốn làm cho sản lượng HtmlTextWriter trên Email Template Outlook trên một mới window.when Tôi đã thử các thẻ HTML được không đúng render <43><41><12><25> Xin chào thế giới !!! clarifier

11

Một ưu điểm khác có thể là sử dụng HtmlTextWriter người ta có thể định dạng mã theo cách sạch hơn (bảo trì hơn) và HtmlTextWriter hỗ trợ mã HTML tự động. Hãy so sánh:

writer.AddAttribute(HtmlTextWriterAttribute.Id, "someId"); 
if (!string.IsNullOrEmpty(cssClass)) writer.AddAttribute(HtmlTextWriterAttribute.Class, cssClass); 
writer.AddStyleAttribute(HtmlTextWriterStyle.Color, "Red"); 
writer.RenderBeginTag(HtmlTextWriterTag.Span); 
writer.WriteEncodedText(text); 
writer.RenderEndTag(); 

so:

StringBuilder html = new StringBuilder(); 
html.Append("<span"); 
html.Append(" id=\"someId\""); 
if (!string.IsNullOrEmpty(cssClass)) html.AppendFormat(" class=\"{0}\"", HttpUtility.HtmlAttributeEncode(cssClass)); 
html.Append(">"); 
html.Append(HttpUtility.HtmlEncode(text)); 
html.Append("</span>"); 

Người ta có thể cho rằng các mã trong ví dụ thứ hai có thể được viết trong một khác nhau, có thể sạch hơn, bằng cách nào, nhưng điều này có thể được coi là một lợi thế của HtmlTextWriter bởi vì về cơ bản, nó thực thi một cách định dạng chuẩn tắc (một lần nữa cải thiện bảo trì).

Chỉnh sửa: Thực ra, tôi đã thực sự mắc lỗi trong đoạn thứ hai và tôi cần quay lại và khắc phục phản hồi. Điều này xác nhận điểm tôi muốn thực hiện.

Các vấn đề liên quan