无法从javascript

时间:2016-12-04 13:04:04

标签: javascript c# jquery asp.net webforms

所以我在这里。我尽我所能自己做,我是asp.net网络表格的新手,我在网上打了一个多星期,阅读了数百篇帖子,但我完全没能解决我的问题。 我正在使用网格视图我有链接按钮,我想用jQuery UI对话框按钮验证。首先,我尝试从代码后面附加事件处理程序,即 btnDelete_click(对象发送者,EventArgs e),以便在删除按钮上单击jQuery对话框进行调用,从{{ 3}}我完全失败了,我看到了,如果它是一个独立的按钮,不在像网格视图等的父容器中,它的工作方式与上面的链接一样,但是如果它在网格中,它会继续说,如果Id没有t存在于当前的背景下。我尽我所能:

1)制作按钮ClientIDMode = Static并尝试使用 document.getElementById('<%= btnDelete.ClientID%>')访问它。click() ; 其中btnDelete是链接按钮的ID。我得到的错误 btnDelete在当前上下文中不存在

2)删除了静态选项并使用了 document.getElementById('<%= gvDoctors.FindControl(“<%= btnDelete.ClientID%>”)。 click(); 。我得到的错误是对象引用没有设置为对象的实例。

3)无论是否使用静态ID模式,我都尝试了所有方法,也使用了 UniqueID ,即使我在右侧复制了来自 DOM Inspect Element 的ID - 单击并检查链接按钮,但全部都是静脉。

然后我尝试了不同的方法,我厌倦了使用 Client.RegisterStartupScript 从代码后面运行JavaScript。我使用StartupScript,以便脚本在关闭body和form标记之前在文档末尾运行,以便在引用之前创建所有元素。使用这种方法,我能够显示jQuery弹出窗口,但仍然是旧问题,我必须调用代码的事件处理程序,如JavaScript中的 btndelete_click(对象发送者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,比如网格中的链接按钮,这样我就可以从代码后面调用它的事件处理程序,或者无法在服务器控件中检索与JavaScript(客户端)相同的子控件ID,并像上面链接的链接一样调用它们的事件处理程序。提前致谢。

注意: - 我还在document.Ready中尝试过对话框脚本而没有在功能中指定它们

0 个答案:

没有答案