2016-12-04 54 views
0

所以我在这里。我尽我所能做到了,我是asp.net网络新手,我在互联网上打了一个星期的头,阅读了数百篇文章,但是我完全没有解决我的问题。 我正在使用网格视图我有链接按钮,我想验证与jQuery UI对话框按钮。首先我试图从代码后面附加事件处理程序,即btnDelete_click(object sender,EventArgs e)删除按钮点击jQuery对话框,从here实现我完全失败了,我看到了,如果它一个独立的按钮,不在像网格视图等父容器中,它的工作原理与上面的链接一样,但如果它在网格中,它会一直说在当前上下文中不存在提供的Id。我试着尽我所能:无法访问从gridview的子控件从javascript

1)制造按钮的ClientIDMode =静态和尝试使用的document.getElementById( '<%= btnDelete.ClientID%>')来访问它单击();其中btnDelete的ID是链接按钮。错误我得到btnDelete不存在于当前上下文。 。

2)删除静态选项和二手的document.getElementById(” <%= gvDoctors.FindControl( “<%= btnDelete.ClientID%>”)点击();的错误,我得到的是对象引用不设置为一个对象的一个​​实例。

3)带和不带静态ID模式我尝试了所有的方法,也用于的UniqueID甚至我从DOM复制ID检查的Elemen在右键单击并检查链接按钮后,全部静止,然后选择“”。

然后我尝试了不同的方法我厌倦了从代码后面运行JavaScript使用Client.RegisterStartupScript。我使用StartupScript,以便在关闭正文和表单标签之前,脚本运行在文档的末尾,以便在引用之前创建的所有元素均为。使用这种方法,我能够显示jQuery弹出窗口,但仍然是老问题,我必须调用后台代码的事件处理程序,如来自JavaScript的btndelete_click(对象发件人EventArgs e),并且没有发生。

这里是我的代码:

的Web表格

<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检索到JavaScr ipt(客户端)并调用他们的事件处理程序,就像上面链接的那样。提前致谢。

注: -我也试过文档中的对话框脚本。准备好并且没有在功能上指定它们

+0

[**'RowCommand' **](https://msdn.microsoft.com/library/system.web.ui.webcontrols.gridview.rowcommand( v = vs.110).aspx)可能会有所帮助 – Phiter

回答

0

如果我正确理解你的问题,你想添加一个jQuery对话框到你的GridView中的LinkBut​​tons。

<asp:LinkButton OnClientClick='<%# "return openDialog(this, &#39;Do you want to delete " + Eval("UserID") + "?&#39;)" %>' ID="deleteItem" runat="server">Delete</asp:LinkButton> 

和JavaScript

<script type="text/javascript"> 
    var confirmed = false; 

    function openDialog(obj, msg) { 
     var btn1 = "Confirm"; 
     var btn2 = "Cancel"; 
     $('<div />').html(msg).dialog({ 
      resizable: false, 
      draggable: false, 
      modal: true, 
      position: { 
       my: 'center', 
       at: 'top+250', 
       of: window 
      }, 
      buttons: [ 
      { 
       text: btn1, 
       icons: { 
        primary: "ui-icon-check" 
       }, 
       click: function() { 
        $(this).dialog("destroy"); 
        confirmed = true; 
        obj.click(); 
       } 
      }, { 
       text: btn2, 
       icons: { 
        primary: "ui-icon-closethick" 
       }, 
       click: function() { 
        $(this).dialog('close'); 
       } 
      } ] 
     }); 

     return confirmed; 
    } 
</script> 
+0

1st thnx 4正在研究它,它的工作范围是在网格视图中单击删除按钮时打开对话框。如果点击确认,它会回传到页面加载方法。你确实理解我的**意图**,但老实说,这不是我的问题的答案(即使它适用于我)。我请求你的一个好处,请指导我一点关于语法的知识。我的意思是,为什么“#”工作和撇号不,为什么我得到一个红色的下划线在*?“* _ NewLine在常量_ **,以及**'?'**在关闭& #39。再次感谢您的时间和精力。 –

+0

'&#39'是[HTML字符参考](http://stackoverflow.com/a/29314258/5836671)。 HTML将其视为撇号。这是需要的,因为在一个GridView中,你需要aspnet数据绑定的撇号'OnClientClick ='<%#',所以你不能使用它的JavaScript。如果你看一下aspx页面的HTML,你会看到经常使用'&#39'。 VS给出了这个错误,我不知道为什么。也许是一个错误。这就是为什么我通常使用来自代码后面的方法('getJavaScriptString(Eval(“UserID”).ToString())'') – VDWWD

+0

来填充该javascript内容。问号只是为了制作一个语法正确的句子。要获取GridView中对象的ID,请查看我的答案[here](http://stackoverflow.com/a/39986491/5836671)。 – VDWWD