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# - Page.FindControl 为 DIV 返回 null

c# - 正则表达式的动态解释

c# - Form.Invoke 卡住 UI

c# - 将 gridView 导出到 Excel 时出现问题

javascript - 动态裁剪图像 css javascript/jquery

html - 具有无序列表的 CSS3 立方体

c# - 如何指定要返回的 SQL 层次结构级别?

c# - update panel的asyncpostbacktrigger可以有两个控件ID吗?

c# - 使无边框形式可移动?

html - 将内容扩展到完整的父级宽度