You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GridView中调用JavaScript打开页面时如何获取对应行的正确ID值

GridView中调用JavaScript打开页面时如何获取对应行的正确ID值

我完全懂你的困扰——现在不管点击GridView里哪一行的超链接,弹出的对话框里总是加载最后一行ID对应的页面,对吧?问题出在你当前的实现方式:你在RowDataBound方法里循环修改全局的commentPage的src属性,每绑定一行就覆盖一次这个值,等所有行绑定完成后,这个src就只剩最后一行的ID了,所以不管点哪行,都是用这个最后设置的地址。

下面是解决这个问题的具体步骤,改完就能拿到对应行的正确ID了:

1. 修改后台RowDataBound方法

不要在后台提前设置commentPage的src,而是把当前行的ID直接传递给JavaScript函数:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        HyperLink commentHyperLink = (HyperLink)e.Row.FindControl("CommentHyperLink");

        int _id = Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "ID"));
        
        // 把当前行的ID作为参数传给showComments函数
        commentHyperLink.Attributes.Add("onclick", $"showComments({_id}); return false;");
        
        // 如果需要兼容老版本C#(不支持$字符串插值),可以用下面的写法:
        // commentHyperLink.Attributes.Add("onclick", string.Format("showComments({0}); return false;", _id));
        
        return;
    }
}

2. 调整JavaScript函数,接收ID参数并动态设置iframe地址

修改showComments函数,让它接收ID参数,然后在打开对话框前动态设置commentPage的src:

function showComments(id) {
    var mydiv = $('#commentDiv');
    var commentIframe = $('#commentPage');
    
    // 用传入的ID动态生成iframe的地址
    commentIframe.attr('src', 'Page2.aspx?id=' + id);
    
    mydiv.dialog({
        autoOpen: false, modal: true, title: 'My Comments', width: '50%',
        position: { my: 'top', at: 'top+150' }
    });
    // 打开对话框
    mydiv.dialog('open');
}

3. 确保前台iframe的ID能被JS正确找到(可选但推荐)

因为你的commentPage是runat="server"的控件,ASP.NET可能会自动修改它的客户端ID,导致JS找不到。可以给它加上ClientIDMode="Static",保证客户端ID和后台ID一致:

<iframe id="commentPage" name="commentPage" runat="server" ClientIDMode="Static"></iframe>

原理说明

现在每个超链接的onclick事件都会携带自己对应行的ID,点击时把ID传给JS函数,JS再用这个ID生成正确的页面地址,这样就不会出现所有行共用最后一个ID的问题了——每点一行,就用该行的ID动态设置iframe的地址,完美解决你的问题。

备注:内容来源于stack exchange,提问作者aantiix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 11:14:31