簡體   English   中英

在Asp.net WebControls,UserControls,Controls上覆蓋Render方法時的最佳實踐

[英]Best practice when overriding Render methods on Asp.net WebControls, UserControls, Controls

在創建自定義WebControlUserControlControl ,需要覆蓋各種Render方法,主要有兩種方法可以實現:

快速又臟:

public override void RenderControl(HtmlTextWriter writer)
{
    writer.Write("<div class=\"{0}\"><a href={1}>{2}</a>", CssClass, "/someurl.aspx", LocalizedStrings.EditLinkText);
    base.RenderControl(writer);
    writer.Write("</div>");
}

漫長而干凈:

public override void RenderControl(HtmlTextWriter writer)
{
    writer.WriteBeginTag(HtmlTextWriterTag.Div.ToString());
    writer.WriteAttribute(HtmlTextWriterAttribute.Class.ToString(), CssClass);
    writer.Write(HtmlTextWriter.TagRightChar);
    var link = new HtmlAnchor();
    link.HRef = "/someurl.aspx";
    link.Title = LocalizedStrings.EditLinkTitle;
    link.InnerText = LocalizedStrings.EditLinkText; ;
    link.Attributes.Add(HtmlTextWriterAttribute.Class.ToString(), "someclass");
    link.RenderControl(writer);
    base.RenderControl(writer);
    writer.WriteEndTag(HtmlTextWriterTag.Div.ToString());
}

我想知道第二種方法是否值得。

作為清潔代碼的粉絲,我會選擇第一種方法。 即使第二種方法更“按書”,它也缺乏第一種方法的清晰度。

源代碼應該始終以清晰的方式傳達意圖(好吧,它也應該工作),所以在證明無效之前,我會選擇第一種方法。

我同意在這種情況下,第一種方法更清潔,因此更適合簡單的情況,但它確實傳達了更多責任,以使輸出正確。 例如,如果必須使用鏈接目標URL的參數值而不是字符串文字,則需要確保在編寫字符串時對其進行了正確編碼(轉義字符等),而HtmlAnchor類將處理該字符串為你自動。

當我開發網頁控件時,我曾問自己一個問題。 為了嘗試解決它,我反編譯了telerik庫,然后我看到了它們如何實現Web控件。 他們開發了許多組件並使用第二個近似值。

在我看來,這是最好的選擇,因為如果控件很復雜,你的代碼會變成很多string.format或類似的東西,很難理解和修改。 當然第二種選擇也可能不清楚,但只需很少的實用方法就可以創建高度可維護的控件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM