gpt4 book ai didi

asp.net - 无法从后面的代码更改 CssClass

转载 作者:行者123 更新时间:2023-11-28 08:41:52 26 4
gpt4 key购买 nike

这一定是世界上最简单的事情,但它就是行不通。

我有一个外部 div,我想对其应用一个类以使其显示样式 = 无,以便它隐藏其中的所有内容。它实际上是一个 asp:panel 元素,所以我假设我可以在后面的代码中设置 control.CssClass = "my-hidden-class"。

我实际上是在按钮单击处理程序上设置它(取决于某些条件)但是从未应用该类。当我检查 Firebug 中的 div 元素时,它甚至没有类属性。它看起来与 .aspx 标记中的完全一样(实际的 css 类很好并且在我以声明方式添加它时得到应用)。

此外,如果我在初始 get 请求的 prerender 方法中设置 CssClass,我可以看到应用的类。所以我想也许我会把所有的逻辑放在预渲染中并相应地更新 Css 类。这也行不通 - 该类在初始时得到应用,但我无法随后更改它。

因此,总而言之,我似乎根本无法在事件处理程序中应用代码隐藏的类,我只能在预渲染中为初始获取请求应用它,并且该值在所有回发中都保留。

我做错了什么?

编辑:这是代码 -

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 - 无法从后面的代码更改 CssClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21144011/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com