使用JavaScript从页面加载背后的代码中添加css类加载asp.net C#

时间:2018-12-15 19:36:26

标签: javascript c# asp.net

我有以下代码。我想做的是仅使用javascript从c#后面的代码中应用CSS类,而无需使用runat服务器属性。

在后面的代码中,我正在使用下面的脚本,但是没有添加活动类。我在这里做错了什么?

C#后面的代码:

ScriptManager.RegisterStartupScript(this, typeof(string), "script", 
    "<script type=text/javascript> $('#pendingtask').addClass('tab-pane fade in active');</script>", 
    false);

视图/页面:

<div class="tab-pane fade in" id="pendingtask">
   <div class="row col-sm-12">
      <div>
         <asp:UpdatePanel ID="UpPending"  runat="server">
            <ContentTemplate>
               <asp:ListView ID="lvPendingTask" runat="server" DataKeyNames="EXV_KEY" OnItemCommand="lvPendingTask_ItemCommand" OnItemDataBound="lvPendingTask_ItemDataBound">
                  <LayoutTemplate>
                     <table id="datatable_fixed_column" class="table-striped table-hover table-responsive table-bordered table-condensed" width="100%">
                        <thead>
                           <tr>
                              <th style="width: 30px">ID</th>
                              <th>Task</th>
                              <th>Stage</th>
                              <th>Status</th>

                              <th style="width: 120px">Options</th>
                           </tr>
                        </thead>
                        <tbody>
                           <tr id="itemplaceholder" runat="server"></tr>
                        </tbody>
                     </table>
                  </LayoutTemplate>
                  <ItemTemplate>
                     <tr>
                        <td>
                           <asp:Label ID="lblID" runat="server" Text='<%#Eval("EXV_KEY") %>'></asp:Label>
                        </td>
                        <td><%#Eval("TASK_DESC")%></td>
                        <td><%#Eval("STAGE_DESC")%></td>
                        <td><%#Eval("ts_desc_eng")%></td>

                        <td>
                           <asp:LinkButton ID="lbtnPrint" class="btn btn-xs btn-info" Visible="False"  CommandName="PrintLetter" runat="server"  OnClientClick="showOverlay();"> Print</asp:LinkButton>
                           <asp:LinkButton ID="lbtnCompleteTask" class="btn btn-xs btn-info" Visible="False" CommandName="CompleteTask" runat="server"  OnClientClick="showOverlay();"> Mark Complete</asp:LinkButton>
                           <asp:LinkButton ID="lbtnEdit" class="btn btn-xs btn-danger" Visible="False" CommandName="EditTask" runat="server"  OnClientClick="showOverlay();"> Edit</asp:LinkButton>
                           <asp:LinkButton ID="lbtnDelete" class="btn btn-xs btn-danger" Visible="False" CommandName="Delete" runat="server"> Delete</asp:LinkButton>
                        </td>
                     </tr>
                  </ItemTemplate>
                  <EmptyDataTemplate>
                     <p> 
                     <h5><span class="label label-danger">No Record Found!  </span></h5>
                     </p>
                  </EmptyDataTemplate>
               </asp:ListView>
               <!-- end widget content -->
            </ContentTemplate>
         </asp:UpdatePanel>
      </div>
      <div class="col-sm-12">
         <hr/>
      </div>
   </div>
</div>

2 个答案:

答案 0 :(得分:0)

您的问题在这里:您已将addScriptTag设置为false,并且没有在代码中添加单词 script 。要消除该问题,您可以执行以下操作:

ScriptManager.RegisterStartupScript(this, typeof(string), "script", " $('#pendingtask').addClass('tab-pane fade in active');", true);

或在JavaScript代码的开头和结尾添加单词script

ScriptManager.RegisterStartupScript(this, typeof(string), "script", " <script>$('#pendingtask').addClass('tab-pane fade in active');</script>", false);

为了更好地理解,您可以阅读以下内容:https://docs.microsoft.com/en-us/dotnet/api/system.web.ui.clientscriptmanager.registerstartupscript?view=netframework-4.7.2#System_Web_UI_ClientScriptManager_RegisterStartupScript_System_Type_System_String_System_String_System_Boolean_

答案 1 :(得分:0)

这可能是2个问题之一(或同时存在)。

  1. 第一个是因为您使用jquery来获取元素 参考,jquery将需要已经加载到页面上,即 您可能可能无法在页面加载时运行此脚本,因为 到那时jquery将不会加载到DOM中。您可以更改为纯javascript来测试这是否是问题所在。下面的javascript应该和jquery一样。

    // create a string for the javascript we want to run on the page:
    string javascriptCode = @"var element = document.getElementById(""pendingTask""); element.classList.add(""tab-pane"", ""fade-in"", ""active"");";
    ScriptManager.RegisterStartupScript(this.GetType(), "MyScript", javascriptCode, true);
    
  2. 问题可能是使用 ScriptManager.RegisterStartupScript而不是 ClientScript.RegisterStartupScriptScriptmanager.RegisterStartupScript应该在 UpdatePanel用于异步回发。在这里,您只想运行一个 脚本并将其从后面的代码中插入, ClientScript.RegisterStartupScript将为您做到这一点。

    查看文档here。方法签名 ClientScript是:

    public void RegisterStartupScript (Type type, string key, string
    script, bool addScriptTags);
    

    将后面的代码更新为此:

    ClientScript.RegisterStartupScript(this.GetType(), "MyScript", 
        "<script type=text/javascript> $('#pendingtask').addClass('tab-pane fade in active');</script>", 
        false);