Пользовательский серверный элемент управления не принимает форматирование CSS
Это приложение ASP.NET 4.5 Web Forms.
Я создал элемент управления, который наследует класс Button, и он просто гарантирует, что пользователи не смогут дважды щелкнуть по нему. Я основал это на примерах, подобных этому.
Моя проблема заключается в том, что он не подхватил форматирование CSS при размещении на странице. Стандартная кнопка на той же странице отображает стили из CSS. Чтобы обойти это, я попытался просто добавить CssClass="uiButton" в разметку, но это тоже не работает. На кнопку не применено форматирование.
Я, кажется, случайно сломал способность кнопки потреблять CSS для форматирования. У кого-нибудь есть идеи о том, что искать? Я вне лидов. Спасибо!
Matt
Вот мой класс кнопки:
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Text
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
'<Assembly: TagPrefix("ServerControl1", "cc1")>
<DefaultProperty("Text"), ToolboxData("<{0}:MyButton runat=server></{0}:MyButton>")>
Public Class MyButton
Inherits Button
Public Sub New()
MyBase.New()
MyBase.UseSubmitBehavior = False
End Sub
Protected Overrides Sub OnPreRender(e As EventArgs)
'OnClientClick = InlineAssignHelper(Me.Enabled = False, True) & OnClientClick
OnClientClick = "this.disabled=true;" + OnClientClick
RegisterClientScript()
RegisterStartupScript()
' MyBase.CssClass = "uiButton"
MyBase.OnPreRender(e)
End Sub
<DefaultValue(False)> _
Public Overrides Property UseSubmitBehavior() As Boolean
Set(value As Boolean)
End Set
Get
End Get
End Property
Private Sub RegisterClientScript()
If Page Is Nothing Then
Throw New Exception("Page is null, MyButton can't register scripts.")
End If
Dim key, url As String
key = "MyButton"
url = ResolveClientUrl("/scripts/helpers/MyButton.js")
If Not Page.ClientScript.IsClientScriptIncludeRegistered(key) Then
Page.ClientScript.RegisterClientScriptInclude(key, url)
End If
End Sub
Private Sub RegisterStartupScript()
If Page Is Nothing Then
Throw New Exception("Page is null, MyButton can't register scripts.")
End If
Dim key, script As String
key = UniqueID & "_Startup"
script = String.Format("MyButton_InitOnClick ( '{0}' )", UniqueID)
If Not Page.ClientScript.IsStartupScriptRegistered(key) Then
Page.ClientScript.RegisterStartupScript(Page.GetType, key, script, True)
End If
End Sub
End Class
Вот JavaScript:
function SubmitButton_Click() {
var src = event.srcElement;
src.disabled = true;
src.aspnet_onclick();
src.disabled = typeof( Page_IsValid ) != “undefined” ? Page_IsValid : true;
}
function SubmitButton_InitOnClick( id )
{
var sb = document.getElementById( id );
sb.aspnet_onclick = sb.onclick;
sb.onclick = SubmitButton_Click;
}
Вот разметка. CSS добавляется на главной странице и просто наследуется стандартными кнопками. Это работает в течение многих лет, поэтому проблема заключается в моей реализации этой кнопки.
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<div>
Testing 123
</div>
<div>
<cc1:MyButton ID="MyButton1" runat="server" text="Push me!" CssClass="uiButton" />
<asp:Button ID="Button1" runat="server" Text="Button" />
<br />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1" ErrorMessage="RequiredFieldValidator"></asp:RequiredFieldValidator>
</div>
</asp:Content>
Я добавил CssClass="uiButton" в качестве обходного пути (это не сработало), но стандартная кнопка в этой разметке отображается в правильном стиле из класса uiButton, используемого в приложении. MyButton отображает без применения стиля.