2008-10-06 19 views
46

Estoy tratando de tomar una identificación de div en el código detrás (C#) y establecer algunos css en ella. ¿Puedo tomarlo del DOM o tengo que usar algún tipo de control?Cómo editar el estilo CSS de un div usando C# en .NET

<div id="formSpinner"> 
    <img src="images/spinner.gif" /> 
    <p>Saving...</p> 
</div> 
+0

Agregar el runat = "servidor" solucionó la mitad de mi problema. Ahora puedo referirme a él en mi código detrás. Sin embargo, parece que no puedo configurar la clase o el estilo de css. Estoy tratando de mostrar: bloquear o mostrar: ninguno. –

+0

Jon: edite su pregunta para agregar el código que está colocando en el código subyacente y DÓNDE lo está colocando, o considere abrir una nueva pregunta para tratar el problema posterior. :) – Rob

+0

Pon atención a cualquiera que esté haciendo este ejemplo exacto: echa un vistazo a los controles de UpdatePanel y UpdateProgress –

Respuesta

74

Añadir el atributo runat="server" a ella por lo que tiene:

<div id="formSpinner" runat="server"> 
    <img src="images/spinner.gif"> 
    <p>Saving...</p> 
</div> 

De esta manera se puede acceder al atributo de clase mediante el uso de:

formSpinner.Attributes["class"] = "classOfYourChoice"; 

También vale la pena mencionar que el control asp:Panel es prácticamente sinónimo (al menos en lo que respecta al marcado prestado) con div, por lo que también podría hacer:

<asp:Panel id="formSpinner" runat="server"> 
    <img src="images/spinner.gif"> 
    <p>Saving...</p> 
</asp:Panel> 

Que a su vez le permite escribir:

formSpinner.CssClass = "classOfYourChoice"; 

Esto le da acceso a más definido a la propiedad y hay otros que pueden, o no, ser de utilidad para usted.

+0

puedes agregar css como formSpinner.Attributes.add ("estilo", "pantalla: ninguno") –

3

Añadir el atributo runat = "servidor" a la etiqueta, a continuación, puede hacer referencia a ella desde el código subyacente.

13

Asegúrate de que tu div esté configurado en runat = "server", luego simplemente haz referencia en el código subyacente y configura el atributo "class".

<div runat="server" id="formSpinner"> 
    ...content... 
</div> 

de código subyacente

formSpinner.Attributes["class"] = "class-name"; 
3

Añadir runat al elemento en el marcado

<div id="formSpinner" runat="server"> 
    <img src="images/spinner.gif"> 
    <p>Saving...</p> 
</div 

A continuación, se puede llegar a los atributos de la clase del control mediante el uso formSpinner.Attributes ("clase ") Solo será una cadena, pero debería poder editarla.

6

Esta pregunta me pone nervioso. Indica que quizás no comprenda cómo el uso del código del lado del servidor afectará el estado DOM de su página.

Cada vez que ejecuta el código del lado del servidor, toda la página se reconstruye desde cero. Esto tiene varias implicaciones:

  • Se envía un formulario del cliente al servidor web. Se trata de la acción más lenta que puede realizar un navegador web, especialmente en ASP.Net, donde el formulario puede rellenarse con campos adicionales (es decir, ViewState). Hacerlo con demasiada frecuencia para actividades triviales hará que su aplicación parezca lenta, incluso si todo lo demás es agradable y ágil.
  • Agrega carga a su servidor, en términos de ancho de banda (flujo ascendente y descendente) y CPU/memoria. Todo lo relacionado con la reconstrucción de su página tendrá que volver a suceder. Si hay controles dinámicos en la página, no olvides crearlos.
  • Cualquier cosa que haya hecho con el DOM desde que se perdió la última solicitud, a menos que recuerde volver a hacerlo para esta solicitud. El DOM de su página es restablecer.

Si puede salirse con la suya, puede presionar esto para javascript y evitar la devolución de datos. Tal vez use una llamada a XmlHttpRequest() para desencadenar cualquier acción del lado del servidor que necesite.

1

Si todo lo que quiere hacer es mostrar u ocultar condicionalmente < div>, entonces podría declararlo como < asp: panel> (se representa a html como una etiqueta div) y establecer su propiedad .Visible.

3

¿Cómo se hace esto sin runat = "server"? Por ejemplo, si tiene un

<body runat="server" id="body1"> 

... y tratar de actualizarlo desde dentro de un UpdatePanel nunca se actualizará.

Sin embargo, si lo mantiene como un control HTML común que no sea del servidor, puede hacerlo. Aquí está el Jquery para actualizarlo:

$("#body1").addClass('modalBackground'); 

¿Cómo se hace esto en codebehind though?

3

Si no desea hacer su control de servidor runat en caso de que necesite la identificación o simplemente no desea agregarlo al estado de vista,

<div id="formSpinner" class="<%= _css %>"> 
</div> 

en el back-end:

protected string _css = "modalBackground"; 
1

para ampliar el post de Peri & por qué es posible que no desee utilizar viewstate el siguiente código:

style="<%= _myCSS %>"

Protected _myCSS As String = "display: none"
Es el enfoque a seguir si está usando AJAX, permite manipular la pantalla mediante el código de fondo asp.net en lugar de jquery/jscript.

Cuestiones relacionadas