【问题标题】:Updating CSS of Controls in different files via CodeBehind通过 CodeBehind 更新不同文件中控件的 CSS
【发布时间】:2016-09-20 10:08:12
【问题描述】:

我有这个 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。不要像我一样!

【问题讨论】:

    标签: c# css asp.net ajax


    【解决方案1】:

    您应该将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");  
    }
    

    【讨论】:

    • 嗯,这似乎对我不起作用。您说从事件处理程序中删除 Controls[0] 在您的测试中有效吗?我想知道为什么我的可能会搞砸?
    • 只是好奇:您的原始代码会崩溃吗?它应该,因为没有runat="server" 属性就无法找到updateThis。至于Controls[0],留着有用吗?无论有没有它,它都对我有用。
    • 点击按钮后我的页面不会崩溃。 AJAX 加载程序 GIF 会出现片刻然后消失,就好像它正在工作但 Style.Add();线似乎并没有真正工作。我注释掉了 Style.Add();行并添加到 UpdateButton.Text = "Done!";一旦 AJAX 加载程序 GIF 消失,它就会更改按钮的文本。我将用更多信息更新原始帖子。
    • 另外,抱歉同行评审。本来打算放到原帖里的,不小心点了你的帖子哈哈。
    • 没问题。您是否将 runat="server" 属性添加到标记中的 div 中?
    猜你喜欢
    • 2017-06-22
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    相关资源
    最近更新 更多