1

我在页面上有一个 RadGrid,当您单击该行时会回发,配置如下:

<ClientSettings EnablePostBackOnRowClick="true">
    <Selecting AllowRowSelect="true" />
    <ClientEvents OnRowClick="RowClick" />
</ClientSettings>

我试图通过以下方式停止事件的传播来停止回发:

function RowClick(sender, e) {
    var masterTable = sender.get_masterTableView();
    var hasReport = masterTable.getCellByColumnUniqueName(e.get_item(), "HasReport").innerHTML;

    if (hasReport.trim() == "No") {
        e.get_domEvent().preventDefault();
        e.get_domEvent().stopPropagation();
    }
}

但这不起作用;回发仍然发生。我有一个包含两条记录的网格,只有当字段的值为“是”时,我才需要它回发,但我无法让它工作。我确信它达到了 no 条件,但即使在停止传播之后,事件仍然会触发。知道如何停止回发吗?我不能使用 RowSelecting 因为它永远不会触发,因为我在行点击时发回消息。

4

2 回答 2

1

删除 EnablePostBackOnRowClick - 将其设置回 false。添加一个 RadAjaxManager(如果您还没有的话)并手动触发 PostBack。尝试这样的事情:

<telerik:RadAjaxManager runat="server" ID="ajaxMgr"></telerik:RadAjaxManager>
<script type="text/javascript">

function rowClick(sender, args) {
    var mastertable = sender.get_masterTableView();
    var id = mastertable.getCellByColumnUniqueName(args.get_item(), "Id").innerHTML;

    if (id == "1") {
        var ajaxMgr = $find("<%= ajaxMgr.ClientID %>");
        ajaxMgr.ajaxRequestWithTarget("<%= grid.UniqueID %>", id);
    }

}

</script>

然后,您需要在代码隐藏中处理 RaisePostBackEvent 方法:

protected override void RaisePostBackEvent(IPostBackEventHandler sourceControl, string eventArgument)
{
     // Do something interesting
}
于 2013-04-18T18:50:23.657 回答
0

您所要做的就是在OnRequestStart满足您的条件时阻止事件的 ajax 调用。为此,您必须:

如果您的行刚刚被点击,请听OnRequestStart并返回:false

在你的 js 中:

var myRowHaveBeenClicked = false;

function OnRequestStart(){
    if(myRowHaveBeenClicked){
        myRowHaveBeenClicked = false;
        return false;
    }
}

在您的 ASP 中:

<telerik:RadAjaxManager runat="server" ID="ajaxmanager">
    <clientevents onRequeststart="OnRequestStart" />
    .......

剩下要做的就是myRowHaveBeenClicked在 rowClick 函数中设置标志。

在您的 RowClick 函数中:

function RowClick(sender, e) {
    var masterTable = sender.get_masterTableView();
    var hasReport = masterTable.getCellByColumnUniqueName(e.get_item(), "HasReport").innerHTML;

    myRowHaveBeenClicked = hasReport.trim() == "No";
}

RowClick事件发生在 之前RequestStart,因此,在那一刻您可以设置一个标志,指示不应发生回发。

解决方案远非干净或优雅,但它有效且非常简单。

希望能帮助到你 :)

于 2014-06-16T21:08:45.293 回答