asp.net – 无法从代码背后更改CssClass
这必须是世界上最简单的事情,但它不起作用.
我有一个外部div,我想应用一个类来使其显示样式=无,以便它隐藏其中的所有内容.它实际上是一个asp:panel元素,所以我假设我可以在后面的代码中设置control.CssClass =“my-hidden-class”. 我实际上是在按钮点击处理程序上设置它(取决于某些条件)但是从不应用该类.当我在Firebug中检查div元素时,它甚至没有class属性.它看起来与.aspx标记完全一样(当我以声明方式添加它时,实际的css类很好并且应用了). 此外,如果我在初始get请求的prerender方法中设置CssClass,我可以看到该类已应用.所以我想也许我会把所有的逻辑放在prerender中并相应地更新Css类.这也行不通 – 该类在初始化时得到应用,但我不能随后更改它. 所以,总结一下,我似乎无法在事件处理程序中完全使用代码中的类,我只能在prerender中将它应用于初始获取请求&此值将保留在所有回发上. 我究竟做错了什么? 编辑:这是代码 – ASPX: <asp:panel runat="server" ID="TariffContainer"><!--this is the div I want to toggle--> <cms:ContentBlock ID="currentTariffsInfo" SkinID="Public/OurPrices/CurrentTariffsInfo" runat="server" /> <ucTcrPanel:tcrpanel ID="tcrpanel" PagingEnabled="true" runat="server" /> <div class="quick-price"> <asp:LinkButton runat="server" CausesValidation="false" ID="QuickEnergyPrice" OnClientClick="Javascript:return false;" CssClass="button subcontent"><span>Get a quick energy price</span></asp:LinkButton> </div> <div class="not-for-sale"> <cms:ContentBlock ID="preservedTariffsLinkInfo" SkinID="Public/OurPrices/PreservedTariffsLinkInfo" runat="server" /> <p> <asp:LinkButton runat="server" CausesValidation="false" ID="ViewNotAvailableTariffs" OnClick="RedirectToUnavailableTariffs" cssclass="arrow">View tariffs not available for sale</asp:LinkButton> </p> </div> </asp:panel> 代码背后: protected void PostCodeChange_BtnClick(object sender,EventArgs e) { if (IsValid) { tcrpanel.ApplyPostcodeUpdate(postcode.EnteredPostCode); tcrpanel.TcrUpdatePanel.Update(); } else { TariffContainer.CssClass = "formContentHidden"; } } 更新 – 按钮点击事件来自用户控件&这被连线以在更新面板上触发更新 – 即发生部分回发.我正在做这个隐藏&显示包含aspx页面中的div&即使所有服务器端页面事件都在执行,我猜测页面的内容没有被重新渲染,所以我没有看到我的更改. 解决方案 – 我最终从服务器喷出了一些javascript: protected void PostCodeChange_BtnClick(object sender,EventArgs e) { tcrpanel.ApplyPostcodeUpdate(postcode.EnteredPostCode); tcrpanel.TcrUpdatePanel.Update(); } 然后在tcrpanel用户控件代码后面: public void ApplyPostcodeUpdate(string postcode) { if (IsValid) { BuildStartUpScript("showTariffContainer();"); } else { BuildStartUpScript("hideTariffContainer();"); } } private void BuildStartUpScript(string functionCall) { StringBuilder script = new StringBuilder(); script.AppendLine("<script type="text/javascript">"); script.AppendLine(functionCall); script.AppendLine("</script>"); ScriptManager.RegisterStartupScript(pnlUpdateTcr,pnlUpdateTcr.GetType(),"HideTariffContainerScript",script.ToString(),false); } 然后在包含的JS文件中: function hideTariffContainer() { $("div.formContentVisible").toggleClass().toggleClass("formContentHidden"); } function showTariffContainer() { $("div.formContentHidden").toggleClass().toggleClass("formContentVisible"); } 解决方法
正如所怀疑的那样,问题是发生了部分回发,其中只重新呈现了更新面板的内容.
也就是说,所有服务器端页面生命周期事件仍在调用中.这让我很困惑,因为我可以调试并看到正在应用但未在html中呈现的CssClass.就像我猜的那样Asp.Net更新面板的工作方式. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – ASP.NET MVC将属性“data-message”添加到H
- asp.net-mvc-3 – 如何指定默认LayoutPage在Razor在ASP.NET
- asp.net-mvc – 带有实体框架的MVC控制器的T4模板 – 主机的
- Asp.Net拒绝在某些页面上访问用户
- asp.net-mvc – MVC脚手架 – 参考程序集中缺少类
- asp.net-core – 如何在Asp.net Core中使用soap web服务?
- ASP.net HttpRequest上的静态HttpClient线程安全
- asp.net – Response.WriteFile和Response.Redirect
- 【FastDFS】FastDFS和asp.net项目的结合
- asp.net-mvc – 我在MVC 5 Visual Studio 2013中的“创建强
- asp.net-mvc-4 – ASP.NET MVC 4移动功能
- asp.net core 系列 5 MVC框架路由(上)
- asp.net – 如何访问嵌套母版页中的控件?为什么
- asp.net-mvc – 如何在视图模型中更改隐式必需属
- asp.net – IIS7:服务应用程序池“YYYYY”的进程
- 在Asp.Net中使用JQuery绑定DropDownlists
- asp.net – 当前上下文中不存在该名称
- asp.net – 您无权查看此目录或页面. Azure Web
- ASP.NET中的BackgroundWorker线程
- asp.net-mvc – 与ASP.NET MVC等效的GetWebResou