c# - 通过CodeBehind更新不同文件中控件的CSS

标签 c# css asp.net ajax

我有这个 AJAX 按钮,我想更新一些 CSS。问题是我希望它更新的控件位于不同的文件中,无法从该文件中移出。

这是我要更新其 CSS 的面板,它位于 Site.master 文件中:

<asp:ScriptManager ID="ScriptManager" runat="server" />
<asp:UpdatePanel ID="Panel2" runat="server" updatemode="Always">
      <ContentTemplate>
          <div id="updateThis" runat="server"><p>Test text</p></div>
      </ContentTemplate>
</asp:UpdatePanel>

这是位于 Items.ascx 文件中的按钮:

<asp:UpdateProgress runat="server" ID="PageUpdateProgress">
     <ProgressTemplate>
         <img class="ajax-loader" src="/Images/ajax-loader.gif" alt="Loading..." />
      </ProgressTemplate>
</asp:UpdateProgress>
<asp:UpdatePanel ID="Panel3" runat="server" updatemode="Conditional">
     <Triggers>
         <asp:AsyncPostBackTrigger controlid="UpdateButton" eventname="Click" />
     </Triggers>
     <ContentTemplate>

          <asp:Button runat="server" OnClick="UpdateButton"
          OnClientClick="hideButton()" Text="Update" 
          class="update" ID="UpdateButton" name="UpdateButton" 
          type="submit"  ></asp:Button>

     </ContentTemplate>
</asp:UpdatePanel>

这是 Items.ascx.cs 方法即 UpdateButton

protected void UpdateButton(object sender, EventArgs e) 
{
    var masterPage = this.Page.Master;
    var updatePanel = masterPage.FindControl("Panel2");

    var div = (HtmlGenericControl)updatePanel.Controls[0].FindControl("updateThis");
    div.Style.Add("color", "#ff0000");  
}

当我点击按钮时,它并没有正常工作。截至目前,使用 AJAX UpdateProgress 模板,它会显示正在加载的 GIF,然后 GIF 消失,文本颜色永远不会改变。

编辑

希望这能让我们更好地了解哪里出了问题:

这行得通

 protected void UpdateButton(object sender, EventArgs e) 
{
    var masterPage = this.Page.Master;
    var updatePanel = masterPage.FindControl("Panel2");

    var div = (HtmlGenericControl)updatePanel.FindControl("updateThis");
    div.Style.Add("color", "#ff0000");  

    UpdateButton.Text = "Done!";
}

我在 FindControl() 方法中使用了#updateThis。不要像我一样!

最佳答案

您应该将 runat="server" 属性添加到 div 控件,以使其在代码隐藏中可见:

<div id="updateThis" runat="server"><p>Test text</p></div>

您还可以删除事件处理程序中的 Controls[0](但根据我的测试,如果您保留它,它会起作用):

protected void UpdateButton(object sender, EventArgs e) 
{
    var masterPage = this.Page.Master;
    var updatePanel = masterPage.FindControl("Panel2");

    var div = (HtmlGenericControl)updatePanel.FindControl("updateThis");
    div.Style.Add("color", "#ff0000");  
}

关于c# - 通过CodeBehind更新不同文件中控件的CSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37392487/

相关文章:

c# - 使用可为空的枚举属性和具有空字符串值的附加选项呈现单选按钮

Css 列布局 - 内联 block 元素,相对于什么百分比宽度?

javascript - 如何在元素悬停时为另一个元素设置动画?

c# - 居中空数据模板

c# - Base to Derived 是可能的(装箱),但是 Derived to base 会给出运行时异常,但这等同于 Unboxing

c# - C#部署的安装问题

c# - 使用 C# 中的方法关闭特定窗体

javascript - Flexbox-layout 在 IE 中开发,在 Firefox 中销毁。这里出了什么问题?

asp.net - 如何使用vb.net从目录中删除文件?

c# - 如何通过 HTML5 报告查看器使用 Telerik Reports