当我点击该行的任何地方时,我正在努力突出显示转发器行。然后当我点击另一行时,前一行变得不突出。所以它正在发挥作用,但仅仅是一瞬间。一旦modalpopup出现,亮点就消失了。顺便说一句,我在每一行都有一个链接按钮,使modalpopup显示,并且我将转发器内的所有标签作为关联控件。所以转发器内的文本都可以作为链接按钮。我知道亮点 - 不高亮的东西是有效的,因为当我只点击没有文字的区域时效果仍然存在。我知道点击链接按钮引起的回发会删除javascript产生的效果。我想知道的是,我该怎么办呢?请帮帮我。
这是我的代码。
目:
<script type = "text/javascript">
var T0;
function CngClass(cls){
this.lst=null;
this.cls=cls;
}
CngClass.prototype.CngClass=function(obj){
if (typeof(obj)=='string') obj=document.getElementById(obj);
if (this.lst) this.lst.className='';
obj.className=this.cls;
this.lst=obj;
}
<style type="text/css">
.selected
{
background-color: Red;
}
</style>
体:
<body onload="T0=new CngClass('selected');T0.CngClass('t0');">
转发器的ItemTemplate:
<ItemTemplate>
<tr id="t0" runat="server" onclick="T0.CngClass(this);" onmouseover="style.backgroundColor='Gainsboro'" onmouseout="style.backgroundColor=''" style="cursor: pointer">
<td><asp:Label ID="lblfullname" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "FULLNAME")%>' AssociatedControlID="lnkselect" />
<asp:HiddenField ID="hiddenrecnum" runat="server" Value='<%# DataBinder.Eval(Container.DataItem, "RECORD_ID")%>' />
</td>
<td><asp:Label ID="lbldeptname" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "DEPT_NAME")%>' AssociatedControlID="lnkselect" /></td>
<td><asp:Label ID="lbldivisions" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "DIVISIONS")%>' AssociatedControlID="lnkselect" /></td>
<td><asp:Label ID="lblposition" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "POSITION")%>' AssociatedControlID="lnkselect" />
<asp:LinkButton ID="lnkselect" runat="server" /></td>
</tr>
</ItemTemplate>
答案 0 :(得分:0)
有几种方法可以解决此问题。
在页面中添加隐藏字段,该字段由JavaScript设置。检查隐藏字段客户端或服务器端,如果字段有值,则重新应用效果。
如果单击该行已经导致回发,您可以设置所选的样式服务器端并在ViewState中维护所选行的ID。
理想情况下,您可以最小化页面重新加载的时间。请记住,整个POST集合(包括ViewState,它将与转发器中的所有标签控件相当大)将被发送到服务器并在每次回发时写回客户端。
在页面标记中:
<!-- hidden field to store value -->
<input type="hidden" id="hdnSelectedRow" runat="server" />
<script>
// This example doesn't use any external libraries, but I suggest using
// jQuery if you want to do more complex manipulation client-side.
function setSelectedRow(sender, id){
sender.className = "selected";
// probably need to also deselect any existing selected item
//
// Store the selected ID in the hidden field. Note that we use the
// server's ID for the control, since ASP.NET may add a prefix to the ID.
document.getElementById("<%=this.hdnSelectedRow.ClientID%>").value = id;
}
</script>
<!-- This assumes that clicking on the row doesn't always postback the
whole grid. If you are always posting back, you probably should just modify
the state of the grid server-side. -->
<ItemTemplate>
<tr id="t0" runat="server"
onclick="selectSelected(this, '<%#Eval("RECORD_ID")%>')">
...
在codebehind中:
protected override OnLoad( EventArgs e )
{
string selectedId = this.hdnSelectedRow.Text;
if( !string.IsNullOrWhiteSpace( selectedId ) )
{
// act
}
}