模式弹出窗口中的按钮单击事件,在网格视图中未触发
Button click event on modal popup, inside a grid-view not firing
我在以下方面遇到了问题。
场景:我有一个asp网格,其中包含几列绑定到数据。最后一列已转换为模板字段。在此模板字段中,有一个按钮,并附有模式弹出窗口扩展器。隐藏在此字段中的是模式弹出窗口。此模式弹出窗口用于添加新帐户。它包含2个文本框,下拉列表和按钮("添加"和"取消")。单击"添加"时,在代码隐藏中插入新帐户后,模式应关闭。
问题:我得到弹出窗口以显示并从缓存中加载下拉列表,没有问题。如何让按钮单击事件在代码隐藏中触发。我尝试使用执行_doPostBack('btnAddAcc','')的JavaScript函数,但它一直返回错误"JavaScript错误:预期对象"。我在谷歌上大约 1 小时后收集到这是因为找不到"btnAddAcc",因为它实际上在网格视图单元格内并且无法直接访问。使用页面方法和 ajax 调用是最后的手段,因为该公司对此有严格的政策,并且只有在一堆文书工作之后才允许这样做。
守则:
<asp:GridView ID="gvNEA" runat="server" CssClass="gridA_Orange"
AutoGenerateColumns="False" AllowPaging="True"
EmptyDataText="No transactions with 'Non Existent Account(s)'"
ShowHeaderWhenEmpty="True" Width="945px">
<Columns>
<asp:BoundField HeaderText="Transaction Date" DataField="Transaction_Date" />
<asp:BoundField HeaderText="Account Number" DataField="Account_Number" />
<asp:BoundField HeaderText="Description" DataField="Description"/>
<asp:BoundField HeaderText="Amount" DataField="Amount"/>
<asp:BoundField HeaderText="Offset Account" DataField="OffsetAccount" />
<asp:BoundField HeaderText="File Name" DataField="FileName" />
<asp:BoundField HeaderText="Transaction Type" DataField="TransType" />
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:Button ID="btnAdd" runat="server" CausesValidation="false"
OnClientClick="showPopUp('pupAddAcc');" Text="Add Account" CssClass="ButtonStyle_Gray" />
<asp:ModalPopupExtender ID="mpeAddAcc" runat="server"
BackgroundCssClass="modalBackground" TargetControlID="btnAdd"
PopupControlID="pnlAddAcc"
CancelControlID="btnCancelAddAcc" DropShadow="True"
Enabled="True">
</asp:ModalPopupExtender>
<div id="pupAddAcc">
<asp:Panel ID="pnlAddAcc" runat="server" BackColor="White"
BorderColor="White" BorderStyle="Solid" BorderWidth="1px" Width="430">
<table align="center" id="tblAddAcc" class="BasicHTMLTable">
<asp:HiddenField ID="hfTransType" runat="server" Value='<%# Bind("TransType") %>' />
<tr align="center" >
<td colspan="2">
<asp:Label ID="lblAccountHeader" runat="server" width="390px" Text="Add Account"
CssClass="ButtonStyle_Orange" Height="25px" Font-Bold="true" Font-Size="Large" />
</td>
</tr>
<tr>
<td align="right" class="PopupCol">Account Number</td>
<td align="left" ><asp:Label ID="lblAccNumber" runat="server" Width="165px"
Text='<%# Bind("Account_Number") %>' /></td>
</tr>
<tr>
<td align="right" class="PopupCol" >Name</td>
<td align="left" ><asp:TextBox ID="txtName" runat="server" Width="165px" />
<asp:RequiredFieldValidator ID="rfvName" runat="server"
ControlToValidate="txtName" Text="*" ValidationGroup="acc" />
</td>
</tr>
<tr>
<td align="right" class="PopupCol" >Search Name</td>
<td align="left" ><asp:TextBox ID="txtSearchName" runat="server" Width="165px" />
<asp:RequiredFieldValidator ID="rfvSName" runat="server"
ControlToValidate="txtSearchName"
Text="*" ValidationGroup="acc" />
</td>
</tr>
<tr>
<td align="right" class="PopupCol" >Group</td>
<td align="left" >
<asp:DropDownList ID="ddlGroup" runat="server" Width="170">
</asp:DropDownList>
</td>
</tr>
<tr>
<td align="right" class="PopupCol" >Currency</td>
<td align="left" >
<asp:DropDownList ID="ddlCurrency" runat="server" Width="170px">
</asp:DropDownList>
</td>
</tr>
<tr>
<td align="center" colspan="2">
<asp:Button ID="btnAddAcc" runat="server" Text="Add Account"
CssClass="ButtonStyle_Orange" OnClientClick="javascript:addAccount()"
ValidationGroup="acc" />
  
<asp:Button ID="btnCancelAddAcc" runat="server" Text="Cancel" CssClass="ButtonStyle_Orange" />
</td>
</tr>
</table>
</asp:Panel>
</div>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="RecId" DataField="RecId" Visible="False"/>
</Columns>
我用这个JavaScript函数打开弹出窗口:
function showPopUp(p) {
var Popup = document.getElementById(p);
Popup.style.visibility = "visible";
Popup.style.display = "";
}
单击btnAddAcc时的函数:
function addAccount() {
_doPostBack('btnAddAcc', '');
};
函数背后的代码
Protected Sub btnAddAcc_Click(sender As Object, e As System.EventArgs)
'Code for inserting new account goes here
End Sub
提前感谢您的任何帮助和建议。问候
OnClick 设置为服务器端事件,会发生什么情况?
<td align="center" colspan="2">
<asp:Button ID="btnAddAcc" runat="server" Text="Add Account"
CssClass="ButtonStyle_Orange" OnClick="btnAddAcc_Click"
ValidationGroup="acc" />
  
<asp:Button ID="btnCancelAddAcc" runat="server" Text="Cancel" CssClass="ButtonStyle_Orange" />
</td>
但。。。获取事件引用(即"__doPostback"事物)的正确方法是在服务器端获取它ClientScript.GetPostBackEventReference
我最终找到了答案。我不得不使用网格视图。行命令事件。它处理网格视图单元格内的所有与按钮相关的事件。
请查看 msdn 文档。它应该解释此命令的大部分内容。
GridView.RowCommand
问候乔治
- 在不刷新整个网格的情况下,向Asp.net网格视图添加新行
- 网格视图:防止行移动到标题行上方
- asp.net网格视图中的面板-我如何在jquery中找到它
- 在网格视图的自动刷新过程中,设置内部网格视图文本框的可见性
- 网格视图页眉冻结在母版页中不起作用
- 如何在网格视图中每次单击按钮或链接时打开不同的新弹出窗口
- 如何使用jquery在网格视图中获取所选单选按钮的值
- 检查网格视图中的复选框是否被选中
- 如何使用 javascript 修改网格视图单元格值
- 通过 JavaScript 从主网格视图上的功能区按钮更新 CRM 2011 中的字段
- 通过jquery将网格视图数据发送到另一个页面
- 将网格视图的两列相乘,并将其显示在新列中
- 如何使用javascript遍历网格视图的列
- 如何从wijmo-flex网格的树视图中的节点转到父节点
- 如何选中/取消选中外部按钮的网格视图复选框
- 将网格视图导出到Excel时出错
- 如何在网格视图中验证asp.net文本框
- 页面加载后,将FooTable断点应用于网格视图中的列标题
- 用javascript制作一个网格视图图像
- jqGrid:双击树视图网格形成视图