首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RadGrid条件行PostBack

RadGrid条件行PostBack
EN

Stack Overflow用户
提问于 2013-04-19 00:56:07
回答 2查看 2.4K关注 0票数 1

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

代码语言:javascript
复制
<ClientSettings EnablePostBackOnRowClick="true">
    <Selecting AllowRowSelect="true" />
    <ClientEvents OnRowClick="RowClick" />
</ClientSettings>

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

代码语言:javascript
复制
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();
    }
}

但这不起作用;回发仍然会发生。我有一个有两个记录的网格,只有当一个字段的值为"Yes“时,我才需要它来回发,但我不能让它工作。我确信它正在达到no条件,但即使在停止传播之后,该事件仍然会触发。你知道怎么停止回发吗?我不能使用RowSelecting,因为它从来不会触发,因为我是在行单击发回的。

EN

回答 2

Stack Overflow用户

发布于 2013-04-19 02:50:24

丢弃EnablePostBackOnRowClick -将其设置回false。如果您还没有RadAjaxManager,请添加一个,并手动触发PostBack。尝试如下所示:

代码语言:javascript
复制
<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方法:

代码语言:javascript
复制
protected override void RaisePostBackEvent(IPostBackEventHandler sourceControl, string eventArgument)
{
     // Do something interesting
}
票数 1
EN

Stack Overflow用户

发布于 2014-06-17 05:08:45

当您的条件满足时,您需要做的就是阻止使用OnRequestStart事件进行ajax调用。为此,您必须:

监听OnRequestStart,如果您的行刚刚被单击,则返回false

在你的js中:

代码语言:javascript
复制
var myRowHaveBeenClicked = false;

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

在ASP中:

代码语言:javascript
复制
<telerik:RadAjaxManager runat="server" ID="ajaxmanager">
    <clientevents onRequeststart="OnRequestStart" />
    .......

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

在您的RowClick函数中:

代码语言:javascript
复制
function RowClick(sender, e) {
    var masterTable = sender.get_masterTableView();
    var hasReport = masterTable.getCellByColumnUniqueName(e.get_item(), "HasReport").innerHTML;

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

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

Is解决方案远不是干净或高尚的,但它是有效的,并且非常简单。

希望它能有所帮助:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16088935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档