2009-07-12 9 views
5

Mam kilka etykiet na mojej stronie z klasą „błędu”, reguła dla .error jest:kontrola ASP.NET z widoczności CSS: ukryte, nie są pokazane na Control.Visible = true

.error { 
    color:Red; 
    visibility:hidden  
} 

znaczniki na etykietach jest:

<asp:Label ID="lblError" runat="server" CssClass="error" ></asp:Label> 

I wtedy ustawić właściwość .text etykiety błędu w kodzie tyłu.
Jeśli używam lblError.Visible = True podczas ustawiania tekstu, etykieta nie jest wyświetlana. Jakieś pomysły, dlaczego tak się stało? Być może jestem w błędzie, ale myślałem, że ustawienie .Visible było jak ustawienie stylu widoczności?

Odpowiedz

13

Właściwość Visible wpływa na renderowanie całego elementu i nie jest związana z atrybutem widoczności CSS. Kiedy false, Widoczny, gdy zapobiega w ogóle renderowaniu HTML.

Aby zmienić atrybut css, musisz zrobić to ręcznie. Możesz to zrobić, usuwając klasę "błąd" z elementu (poprzez właściwość CssClass) lub ustawiając atrybut style = "visibility: visible" ręcznie za pomocą właściwości Attributes (ponieważ atrybut style zastępuje klasę css):

control.Attributes["style"] = "visibility: visible"; 
3

spojrzeć na tej stronie, należy wyjaśnić rzeczy: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.webcontrol.style.aspx

Jak napisano wcześniej:

właściwość Widoczny jest po stronie serwera i określa, czy serwer będzie oddać kontrolę czy też nie (jeśli nie jest renderowany, żaden HTML nie będzie b e stworzone dla niego i nie ma go w ostatecznym wysłaniu HTML do klienta).

Właściwość Styl steruje atrybutem stylu elementu. Element zostanie wyrenderowany, ale możesz kontrolować widoczność (CSS).

10

Jesteś coraz mylić między widoczności CSS i właściwości Visible po stronie serwera kontroli. Aby lepiej to zrozumieć, zalecamy utworzenie przykładowej strony z etykietą, przełączenie właściwości widocznej między true i false i wyświetl wygenerowany kod HTML.

Co znajdziesz, jest następujące. Jak prawdziwe:

<div> 
    <label runat="server" visible="true">Hello</label> 
</div> 

odda:

Kiedy ustawiony na false, to render:

<div> 

</div> 
+0

Tak, nie byłem pewien, co było diff. – Fermin

+0

To jest super. Mniej html do renderowania = szybsza strona. Czy mam rację zakładając, że użyłbym tylko metody css, gdybym chciał dynamicznie ujawnić kontrolę po kliknięciu na określony przycisk? – rory

+0

@rory yes, aby uzyskać tę kontrolę na stronie, wymagany będzie jednak odświeżenie strony do serwera. – Sarfaraaz