2008-09-17 54 views
1

我使用AJAX dropdownextender創建了自定義下拉列表。在我的下拉麪板中,我有我的選項linkbuttons。Linkbutton單擊事件沒有運行處理程序

<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.Click += new EventHandler(OnSelect); 

lb.OnClientClick = "setDDL(" + lb.Text + ")"); 

更換

lb.Attributes.Add("onclick", "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()"); 

回答

1

我不知道是什麼你的setDDL方法會在你的腳本中執行,但是如果單擊一個鏈接按鈕,它會觸發。我認爲你可能會更好,只是插入一個通用的html錨點,而不是.net鏈接按鈕,因爲你將不會引用在服務器端進行控制。然後你可以用你的setDDL方法處理數據。此外,您可能需要引用您在setDDL調用中放置的字符串,因爲如果您將字符串數據放在不帶引號的位置,會導致腳本問題(如未調用方法+頁面錯誤)。

0

添加應該看起來像這樣(在字符串周圍添加''並在javascript語句的末尾添加一個;)。

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

或!

設置鏈接按鈕上的OnClientClick property

1

好吧,我用Literals創建了onclicks錨標籤,並且這似乎很好。非常感謝。