0

--------------Gridviews DataBound 事件 -----

protected void grdShowCallingList_DataBound(object sender, EventArgs e)
{
    if (grdShowCallingList.Rows.Count > 0)
    {
      foreach (GridViewRow row in grdShowCallingList.Rows)
        {
           LinkButton lnkCallHistorySummary = (LinkButton)row.FindControl("lnkCallHistorySummary");
            lnkCallHistorySummary.OnClientClick = "return getCallHistroySummary('" + lblPersonID.Text + "','" + lblDomainID.Text + "');";
        }
    }
}

-------------Javascript 事件调用触发器------

function getCallHistroySummary(PID,DID)
{
document.getElementById("ctl00_cphContent_hfCHS").value = PID + "|" + DID;
document.getElementById("ctl00_cphContent_btnTrgCHS1").click();
return false;

}
function btnTrgCHS1Click() {
document.getElementById("ctl00_cphContent_btnTrgCHS_server").click();
return false;
}

-------------要触发的按钮-------------

//------------Modal Popup Starts-------------
<div ID="pnlCallSumHistory" runat="server"  style="overflow: scroll; width: 710px; height: 400px;">
<asp:Button ID="btnTrgCHS_server" runat="server" OnClick="btnTrgCHS_Click" style="display:none;" />

<asp:UpdatePanel ID="updatePnlCallHistory" runat="server">
<ContentTemplate>
<asp:Literal ID="ltrCallHistory" runat="server"></asp:Literal>

</ContentTemplate>
<Triggers >
<asp:AsyncPostBackTrigger ControlID="btnTrgCHS_server" EventName="Click" />
</Triggers>
</asp:UpdatePanel>

</div>
//------------Modal Popup Panel Ends-------------
<asp:Button ID="btnTrgCHS1" runat="server"  style="display:none;"         onclientclick="btnTrgCHS1Click();"  />

我无法触发与btnTrgCHS_server 点击事件相关的触发事件...

4

3 回答 3

0

如果是这种情况,您需要使用 JavaScript 中的 __doPostback() 手动触发回发。

然后在 Page_Load() 中找到回发的元素。如果按钮的 ID 是您要查找的 ID,则使用空参数调用事件。这应该可以解决您的问题。

btnTrgCHS1Click(null,null)

并且事件应该是 OnClick 而不是 onClientClick()

于 2012-09-11T23:36:05.280 回答
0

看起来您btnTrgCHS_server是嵌套在 a 中的控件GridView它没有触发的原因是因为UpdatePanel将在页面上执行 aFindControl()来查找btnTrgCHS_server。该FindControl()方法不会查看嵌套控件。

最简单的做法是将另一个包裹UpdatePanel如下GridView

  <asp:UpdatePanel ID="updPanelGridView" ChildrenAsTriggers="true" UpdateMode="Conditional" runat="server">
    <ContentTemplate>
      <asp:GridView ID="gvTest" runat="server" />
    </ContentTemplate>
  </asp:UpdatePanel>

  <%-- other code etc --%>

  <asp:UpdatePanel ID="updatePnlCallHistory" UpdateMode="Always" runat="server">
    <ContentTemplate>
      <asp:Literal ID="ltrCallHistory" runat="server"></asp:Literal>
    </ContentTemplate>
  </asp:UpdatePanel>

ChildrenAsTriggers将意味着面板内的任何表单提交都会导致 AJAX 回发。

需要在您周围的上设置UpdateModeof ,以便在触发 AJAX 回发时更新。AlwaysUpdatePanelLiteralupdPanelGridView

唯一要记住的是,这将始终更新updPanelGridView

我也不确定您的 中到底是什么GridView,因此它可能会导致冲突。

如果发生这种情况,您可以尝试将 Button 包装在GridViewin 中UpdatePanel- 这可能会减少问题

注意 - 这也很可能会导致 IDbtnTrgCHS1更改,因此您可能需要将调用click()事件的 JavaScript 更新为新 ID。

编辑

通过查看有关其他答案的更新问题/讨论,我想我知道问题所在。你需要修改两件事:

1 - 更改部分ControlIDTriggers的指向按钮本身 - 而不是您要调用的服务器方法。

IE

<Triggers >
<asp:AsyncPostBackTrigger ControlID="btnTrgCHS" EventName="Click" />
</Triggers>

2 - 更改按钮以包含OnClick- 您尚未定义单击按钮时应调用的服务器端方法。这意味着 AJAX 在回发时不知道使用哪种方法。

IE

<asp:Button ID="btnTrgCHS1" OnClick="btnTrgCHS1_server" runat="server"  style="display:none;"         onclientclick="btnTrgCHS1Click();"  />
于 2012-09-10T08:58:09.093 回答
0

不要对动态生成的 ID 进行硬编码。这些将随着您添加容器控件而改变。

改为使用ClientID属性来获取由 asp.net 生成的客户端 ID。

function getCallHistroySummary(PID,DID){
  document.getElementById("<%=hfCHS.ClientID%>").value = PID + "|" + DID;
  document.getElementById("<%=btnTrgCHS_server.ClientID%>").click();
  return false;
}

您的 ClientID 似乎确实是错误的。更正它们并检查

于 2012-09-10T09:20:27.767 回答