Linkbutton单击事件未运行处理程序

时间:2008-09-17 19:15:48

标签: c# events asp.net-ajax webforms

我正在使用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 + ")");

我正在客户端测试带有警报的分支,什么都没有。

编辑: 我想尝试添加通用锚点,但我想我可以将该元素添加到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()");

3 个答案:

答案 0 :(得分:1)

我不确定你的setDDL方法在你的脚本中做了什么,但如果单击其中一个链接按钮,它应该触发。我认为你可能最好只插入一个通用的html锚点,而不是.net链接按钮,因为你没有引用服务器端的控件。然后,您可以使用setDDL方法处理数据excahnge。此外,您可能希望引用您在setDDL调用中放置的字符串,因为如果您放置没有引号的文字字符串数据,将导致脚本问题(例如不调用方法+页面错误)。

答案 1 :(得分:1)

好的,我使用Literals创建了带有onclicks的锚标签,这看起来效果很好。非常感谢。

答案 2 :(得分:0)

add应该看起来像这样(在字符串周围加上''并添加一个;到javascript语句的末尾)。

lb.Attributes.Add("onclick", "setDDL('" + lb.Text + "');");

OR!

在链接按钮上设置OnClientClick property