2011-10-11 45 views
2

首先,請有人評論一下微軟爲什麼選擇讓ASP.NET按鈕控件呈現<input type='button' />標記而不是<button />標記?我看到了一些問題(特別是在創建沒有文本和圖標的jQuery按鈕時)。ASP.NET按鈕並覆蓋呈現事件

其次,我試圖通過覆蓋Render()事件來創建我自己的自定義按鈕輸出,並且在試圖瞭解如何改變由此事件提供的輸出方面存在一些困難。

如果我看那個是作爲參數傳遞給Render()事件HtmlTextWriter我可以看到它包含一個受保護的財產TagKey = Input {47},是不是可以簡單地以某種方式修改該屬性並將其更改爲一個按鈕或者我需要創建一個HtmlTextWriter的新實例並從頭開始填充它?如果是這樣,任何人都可以提供一些指導,說明如何實現這一點,以及是否需要特別考慮以確保我的派生按鈕類在功能上等同於原始(不包括html)?

<Assembly: TagPrefix("MyCompany", "MyCustomButton")> 
Public Class MyButton 
    Inherits Button 

    Protected Overrides Sub OnPreRender(e As System.EventArgs) 
     MyBase.OnPreRender(e) 
    End Sub 

    Protected Overrides Sub Render(writer As System.Web.UI.HtmlTextWriter) 
     'writer.TagKey = Input {47} 
     MyBase.Render(writer) 
    End Sub 
End Class 

回答

1

對微軟的判決不知道,但對於TagKey,你只需要重寫TagKey property和返回HtmlTextWriterTag.Button。您還需要覆蓋AddAttributesToRender method而不調用基本方法,以便它不會輸出type="button"屬性。

1

Button元素在不同的瀏覽器中使用時,特別是關於提交的數據有一些怪癖。微軟很可能選擇使用輸入來實現瀏覽器實現之間的更大一致性。