如何在.NET中使用C#编辑div的CSS样式
我想在后面的代码(C#)中获取一个div的ID,并设置一些CSS。 我可以从DOM中抓取它,还是必须使用某种控件?
<div id="formSpinner"> <img src="images/spinner.gif" /> <p>Saving...</p> </div>
将runat="server"
属性添加到它,以便您有:
<div id="formSpinner" runat="server"> <img src="images/spinner.gif"> <p>Saving...</p> </div>
这样,您可以使用以下方式访问类属性:
formSpinner.Attributes["class"] = "classOfYourChoice";
另外值得一提的是, asp:Panel
控件与div
实际上是同义词(至less就渲染标记而言),所以你也可以这样做:
<asp:Panel id="formSpinner" runat="server"> <img src="images/spinner.gif"> <p>Saving...</p> </asp:Panel>
然后,你可以写:
formSpinner.CssClass = "classOfYourChoice";
这给你更多的定义访问财产,也有其他人可能会或可能不会对你有用。
确保你的div被设置为runat =“server”,然后简单地在代码隐藏中引用它,并设置“class”属性。
<div runat="server" id="formSpinner"> ...content... </div>
代码隐藏
formSpinner.Attributes["class"] = "class-name";
这个问题让我紧张。 它表明,也许你不明白如何使用服务器端代码会影响你的网页的DOM状态。
无论何时运行服务器端代码,整个页面都是从头开始重build的。 这有几个含义:
- 表单从客户端提交到Web服务器。 这是关于网页浏览器可以采取的最慢的行动,尤其是在ASP.Net的forms可能填充额外的领域(即:ViewState)。 对于微不足道的活动而言,经常这样做会使您的应用程序显得迟钝,即使其他所有内容都很好也很有活力。
- 它在带宽(上行和下行)和CPU /内存方面增加了服务器的负载。 涉及重build页面的一切都将不得不再次发生。 如果页面上有dynamic控件,请不要忘记创build它们。
- 自从上次请求以来,对DOM做的任何操作都会丢失,除非您记得为此请求重新执行操作。 你的页面的DOM被重置 。
如果你可以摆脱它,你可能会想把它推到JavaScript,并避免回发。 也许使用一个XmlHttpRequest()调用来触发你需要的任何服务器端操作。
将runat =“server”属性添加到标记中,然后您可以从代码隐藏中引用它。
将runat添加到标记中的元素
<div id="formSpinner" runat="server"> <img src="images/spinner.gif"> <p>Saving...</p> </div
然后你可以通过使用formSpinner.Attributes(“class”)来获得控件的类属性它只会是一个string,但你应该能够编辑它。
你如何做到这一点没有runat =“服务器”? 例如,如果你有一个
<body runat="server" id="body1">
…并尝试从UpdatePanel内更新它永远不会得到更新。
但是,如果你保持它作为一个普通的非服务器的HTML控制,你可以。 这里是Jquery更新它:
$("#body1").addClass('modalBackground');
你如何在代码隐藏中做到这一点?
如果你不想让你的控制runat服务器,以防万一你需要的ID或只是不想把它添加到视图状态,
<div id="formSpinner" class="<%= _css %>"> </div>
在后端:
protected string _css = "modalBackground";
如果你只想有条件地显示或者隐藏一个<div>,那么你可以将它声明为一个<asp:panel>(把html作为div标签呈现),并将其设置为.Visible属性。
要扩展Peri的post,为什么我们不想使用viewstate下面的代码:
style="<%= _myCSS %>"
Protected _myCSS As String = "display: none"
如果您使用的是AJAX,是否需要考虑这个方法,它允许通过asp.net后端代码而不是jQuery / jscript来操作显示。