回发后,转发器行突出显示不会持续存在

时间:2012-03-21 02:40:38

标签: javascript asp.net repeater

当我点击该行的任何地方时,我正在努力突出显示转发器行。然后当我点击另一行时,前一行变得不突出。所以它正在发挥作用,但仅仅是一瞬间。一旦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>

1 个答案:

答案 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
    }
}