【发布时间】:2016-12-04 13:04:04
【问题描述】:
所以我来了。我尽力自己做,我是 asp.net 网络表单的新手,我在互联网上打了一个多星期,阅读了数百篇帖子,但我完全没能解决我的问题。 我正在使用网格视图我有我想用 jQuery UI 对话框按钮验证的链接按钮。首先,我尝试从后面的代码中附加事件处理程序,即 btnDelete_click(object sender, EventArgs e) 在 jQuery 对话框的 Delete 按钮单击时调用,从 @987654321 实现@我完全失败了,我看到,如果它是一个独立的按钮,而不是在像 grid-view 等父容器中,它就像上面的链接中所做的那样工作,但如果它在网格中,它会一直说提供的 Id 不存在在当前情况下。我尽我所能:
1) 使按钮 ClientIDMode = Static 并尝试使用 document.getElementById('').click(); 其中 btnDelete 是 链接按钮 的 ID。我得到的错误 btnDelete 在当前上下文中不存在。
2) 移除静态选项并使用 document.getElementById('").click() ;。我得到的错误是对象引用未设置为对象的实例。
3) 有无静态 ID 模式我尝试了所有方法,也使用了 UniqueID 甚至我从 DOM Inspect Element 复制了 ID -单击并检查链接按钮,但一切正常。
然后我尝试了不同的方法,我厌倦了使用 Client.RegisterStartupScript 从后面的代码运行 JavaScript。我使用了 StartupScript,以便脚本在关闭正文和表单标记之前在文档末尾运行,以便所有元素在被引用之前创建。使用这种方法,我能够显示 jQuery 弹出窗口,但仍然是老问题,我必须从 JavaScript 调用 btndelete_click(object sender EventArgs e) 之类的代码事件处理程序,但它没有发生。
这是我的代码:
网络表单
<asp:GridView ID="gvDoctors" runat="server" AutoGenerateColumns="false" OnRowDataBound="gvDoctors_RowDataBound">
<columns>
<asp:TemplateField>
<ItemTemplate>
<asp:HiddenField ID="hdnUserID" runat="server" value='<%#DataBinder.Eval(Container.DataItem, "UserID")%>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Delete">
<ItemTemplate>
<asp:LinkButton runat="server" ID="btnDelete" ClientIDMode="Static" CssClass="test" OnClientClick="return stopASPOnClick()" OnClick="btnDelete_Click">Delete
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</columns>
</asp:GridView>
<script type="text/javascript">
$(document).ready(function () {
var bootstrapButton = $.fn.button.noConflict();
$.fn.bootstrapBtn = bootstrapButton;
});
function openDialog() {
$('#dialog-delete').dialog({
resizable: false,
height: 150,
width: 375,
autoOpen: false,
modal: true,
buttons: {
Delete: $("#dialog-delete").on('click', function (e) {
document.getElementsById('<%= gvDoctors.FindControl("btnDelete").ClientID%>').click();
$(this).dialog("close");
}),
Cancel: $("#dialog-delete").on('click', function () {
$(this).dialog("close");
})
}
});
$('.test').click(function (e) {
$('#dialog-delete').dialog('open');
})
}
function stopASPOnClick() {
return false;
}
</script>
所以被问到的 问题 是如何获得嵌套在父控件中的子控件的 ID,例如网格中的链接按钮,以便我可以从后面的代码中调用其事件处理程序,或者无法将与服务器控件中相同的子控件 ID 检索到 JavaScript(客户端)并调用它们的事件处理程序,如上面所附链接中所示。提前致谢。
注意:-我也尝试过 document.Ready 中的对话框脚本,但没有在函数中指定它们
【问题讨论】:
-
RowCommand可能会有帮助
标签: javascript c# jquery asp.net webforms