RadGrid条件行PostBack

时间:2013-04-18 16:56:07

标签: javascript asp.net telerik webforms radgrid

我在页面上有一个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();
    }
}

但这不起作用;回发仍然发生。我有一个有两个记录的网格,只有当一个字段的值为&#34;是&#34;时才需要它回发,但是我无法使其工作。我确定它没有达到任何条件,但即使在停止传播之后,事件仍然会发生。知道如何停止回发吗?我无法使用RowSelecting,因为它永远不会触发,因为我会在行点击中回复。

2 个答案:

答案 0 :(得分:0)

删除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
}

答案 1 :(得分: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" />
    .......

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

在你的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之前,因此,在那一刻,您可以设置一个标志,指示不应该发生回发。

解决方案是否远非干净或优雅,但它的工作原理非常简单。

希望有所帮助:)