Linkbutton单击事件未运行处理程序
时间:2020-03-05 18:59:44 来源:igfitidea点击:
我正在使用AJAX dropdownextender创建自定义下拉列表。在我的下拉面板中,我有用于选择的链接按钮。
<asp:Label ID="ddl_Remit" runat="server" Text="Select remit address." Style="display: block; width: 300px; padding:2px; padding-right: 50px; font-family: Tahoma; font-size: 11px;" /> <asp:Panel ID="DropPanel" runat="server" CssClass="ContextMenuPanel" Style="display :none; visibility: hidden;"> <asp:LinkButton runat="server" ID="Option1z" Text="451 Stinky Place Drive <br/>North Nowhere, Nebraska 20503-2343 " OnClick="OnSelect" CssClass="ContextMenuItem" /> <asp:LinkButton runat="server" ID="Option2z" Text="451 Stinky Place Drive <br/>North Nowhere, Nebraska 20503-2343 " OnClick="OnSelect" CssClass="ContextMenuItem" /> <asp:LinkButton runat="server" ID="Option3z" Text="451 Stinky Place Drive <br/>North Nowhere, Nebraska 20503-2343 " OnClick="OnSelect" CssClass="ContextMenuItem" />--> </asp:Panel> <ajaxToolkit:DropDownExtender runat="server" ID="DDE" TargetControlID="ddl_Remit" DropDownControlID="DropPanel" />
这很好。现在,我要做的是动态填充此下拉列表。这是我的最佳尝试:
private void fillRemitDDL() { //LinkButton Text="451 Stinky Place Drive <br/>North Nowhere, Nebraska 20503-2343 " OnClick="OnSelect" CssClass="ContextMenuItem" DAL_ScanlineTableAdapters.SL_GetRemitByScanlineIDTableAdapter ta = new DAL_ScanlineTableAdapters.SL_GetRemitByScanlineIDTableAdapter(); DataTable dt = (DataTable)ta.GetData(int.Parse(this.SLID)); if (dt.Rows.Count > 0) { Panel ddl = this.FindControl("DropPanel") as Panel; ddl.Controls.Clear(); for (int x = 0; x < dt.Rows.Count; x++) { LinkButton lb = new LinkButton(); lb.Text = dt.Rows[x]["Remit3"].ToString().Trim() + "<br />" + dt.Rows[x]["Remit4"].ToString().Trim() + "<br />" + dt.Rows[x]["RemitZip"].ToString().Trim(); lb.CssClass = "ContextMenuItem"; lb.Attributes.Add("onclick", "setDDL(" + lb.Text + ")"); ddl.Controls.Add(lb); } } }
我的问题是我无法使事件运行脚本!我已经尝试了上面的代码以及替换
lb.Attributes.Add("onclick", "setDDL(" + lb.Text + ")");
和
lb.Click += new EventHandler(OnSelect);
并且
lb.OnClientClick = "setDDL(" + lb.Text + ")");
我正在客户端用Alerts测试分支,却一无所获。
编辑:
我想尝试添加通用锚,但我想可以将元素添加到asp.net控件中。我也无法从服务器代码访问客户端div以这种方式添加它。我将不得不对事件使用某种控制。我的setDLL函数如下:
function setDDL(var) { alert(var); document.getElementById('ctl00_ContentPlaceHolder1_Scanline1_ddl_Remit').innerText = var; }
我也只是在函数调用中取出了字符串变量(即
lb.Attributes.Add("onclick", "setDDL(" + lb.Text + ")");
到
lb.Attributes.Add("onclick", "setDDL()");
解决方案
回答
我不确定setDDL方法在脚本中的作用,但是如果单击链接按钮之一,它将触发。我认为我们最好插入通用的html锚,而不是.net链接按钮,因为我们将不会引用服务器端的控件。然后,我们可以使用setDDL方法处理数据交换。此外,我们可能希望引用在setDDL调用中放置的字符串,因为给定放置不带引号的文字字符串数据会导致脚本问题(例如不调用方法+页面错误)。
回答
add应该看起来像这样(在字符串周围添加",并在javascript语句的末尾添加一个;)。
lb.Attributes.Add("onclick", "setDDL('" + lb.Text + "');");
或者!
在链接按钮上设置OnClientClick属性。
回答
好的,我使用Literals创建了带有onclick的锚标记,这似乎效果很好。非常感谢。