我有以下代码。我想做的是仅使用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>
答案 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);
答案 1 :(得分:0)
这可能是2个问题之一(或同时存在)。
第一个是因为您使用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);
问题可能是使用
ScriptManager.RegisterStartupScript
而不是
ClientScript.RegisterStartupScript
。
Scriptmanager.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);