我有一个有几列的GridView
。当您单击行上的任意位置时,将出现带有命令的PostBack,但最后一列除外,它是一个删除按钮,它有自己的与之关联的命令。我可以使用以下命令来实现这一点
protected override void Render(HtmlTextWriter writer)
{
foreach (GridViewRow r in CourtGrid.Rows)
{
if (r.RowType == DataControlRowType.DataRow)
{
//Clicking any cell will open the details page, except for the last cell, which is Delete
for (int i = 0; i < r.Cells.Count - 1; ++i)
{
r.Cells[i].Attributes["onclick"] = this.Page.ClientScript.GetPostBackClientHyperlink(CourtGrid, "Edit$" + r.RowIndex, true);
}
//Much lighter page produced
//r.Attributes["onclick"] = this.Page.ClientScript.GetPostBackClientHyperlink(CourtGrid, "Edit$" + r.RowIndex, true);
}
}
base.Render(writer);
}
但是这会给页面添加很多额外的数据。源文件中有一列显示为
<tr>
<td onclick="javascript:__doPostBack('ctl00$ctl00$MainContent$PageContent$CourtGrid','Edit$0')">ADAIM</td>
<td onclick="javascript:__doPostBack('ctl00$ctl00$MainContent$PageContent$CourtGrid','Edit$0')">Ada</td>
<td onclick="javascript:__doPostBack('ctl00$ctl00$MainContent$PageContent$CourtGrid','Edit$0')">Municipal</td>
<td onclick="javascript:__doPostBack('ctl00$ctl00$MainContent$PageContent$CourtGrid','Edit$0')">Ada</td>
<td onclick="javascript:__doPostBack('ctl00$ctl00$MainContent$PageContent$CourtGrid','Edit$0')">County</td>
<td onclick="javascript:__doPostBack('ctl00$ctl00$MainContent$PageContent$CourtGrid','Edit$0')">Ada</td>
<td onclick="javascript:__doPostBack('ctl00$ctl00$MainContent$PageContent$CourtGrid','Edit$0')">ID</td>
</tr>
但是如果你再看看我的代码,你会发现有一行被注释掉了
r.Attributes["onclick"] = this.Page.ClientScript.GetPostBackClientHyperlink(CourtGrid, "Edit$" + r.RowIndex, true);
如果我使用这段代码,我得到的行数要少得多
<tr onclick="javascript:__doPostBack('ctl00$ctl00$MainContent$PageContent$CourtGrid','Edit$0')">
<td>ADAIM</td>
<td>Ada</td>
<td>Municipal</td>
<td>Ada</td>
<td>County</td>
<td>Ada</td>
<td>ID</td>
</tr>
但是,当单击Delete按钮时,我同时获得了Delete和Edit命令,这是我不想要的。有没有办法让我在忽略最后一个单元格的同时获得完整行实现的轻量级结果?
发布于 2014-05-27 10:19:05
这是正常的行为。发生的情况是,最后一个单元格在行内,单元格单击首先发生,然后行单击事件发生。我猜你可以利用这个事件冒泡行为来停止点击事件的传播。因此,当单元格单击发生时,您应该停止单击事件的传播。例如,
element.onclick = function(e){
e.stopPropagation();
};
这个JSFiddler Example用一个普通的html表来演示它。所以,我猜这只是一个修改单击事件处理程序来触发回发和停止事件传播的问题,一些类似于……
r.Attributes["onclick"] = string.Format(@"function(e){{
__doPostBack(&#{0};{1}&#{0};,&#{0};Edit$0&#{0};);
e.stopPropagation();
}}", r.RowIndex, CourtGrid.UniqueID);
请注意,我没有对此进行测试,所以不要做任何假设,但它应该会让您了解如何实现相同的目标。希望这是有意义的
发布于 2018-09-19 06:31:01
尝试使用:
OnClientClick="javascript:event.stopPropagation()"
在"aspx“页面上的delete按钮的定义中(即在GridView行的内部)。然后,您可以使用"OnClick“属性作为默认行为:
OnClick="btnDelete_Click"
其中"btnDelete_Click“应在代码后台(aspx.cs)中定义,例如:
protected void btnDelete_Click(object sender, EventArgs e)
{
// Performs the related delete actions...
}
https://stackoverflow.com/questions/23879881
复制相似问题