2013-02-12 66 views
1

我想使用AjaxToolKit的dropdownlistextender構造下拉列表。 我有以下的標記:如何使用Dropdown Extender觸發OnSelectedIndexChanged事件

<asp:Label ID="ddTest" runat="server" Text="Transactions" Width="300px" BorderColor="#C0C0C0" CssClass="selecter"/> 
    <ajaxToolkit:DropDownExtender runat="server" ID="ddeSections" 
       TargetControlID="ddTest" DropDownControlID="panelItems" HighlightBackColor="Silver" 
       DropArrowBackColor="white" HighlightBorderColor="Silver"/> 

及以下的 「名單」 的項目:

<table runat="server" id="ctlOptions" class="options" cellspacing="2" cellpadding="2" border="1"> 
    <tr><td class="item" onmouseover="mouseOver(this)" onmouseout="mouseOut(this)" onclick="clickIt(this)">Transactions</td></tr> 
    <tr><td class="item" onmouseover="mouseOver(this)" onmouseout="mouseOut(this)" onclick="clickIt(this)">The second option</td></tr> 
    <tr><td class="item" onmouseover="mouseOver(this)" onmouseout="mouseOut(this)" onclick="clickIt(this)">The third option</td></tr> 
    <tr><td class="item" onmouseover="mouseOver(this)" onmouseout="mouseOut(this)" onclick="clickIt(this)">The fourth option</td></tr> 
    <tr><td class="item" onmouseover="mouseOver(this)" onmouseout="mouseOut(this)" onclick="clickIt(this)">The fifth option</td></tr> 
    </table> 

我的JavaScript看起來像這樣:

function mouseOver(obj) { 
    if (obj) obj.className = 'itemOver'; 
} 


function mouseOut(obj) { 
    if (obj) obj.className = 'item'; 
} 

其中項目itemOver是適當樣式的CSS類。 問題是我想要我的onClick點擊事件觸發服務器上的SelectedIndexChanged -type事件。 我曾嘗試使用此功能:

function clickIt(obj) { 
    var ddTest = document.getElementById("ctl00_ContentPlaceHolder1_ddTest"); 
    var selVal = ''; 
    if (ddTest) { 
     selVal = obj.firstChild.nodeValue; 
     ddTest.firstChild.nodeValue = selVal; 
     __doPostBack('<%=ddSections.ClientID %>', ''); 
    } 
} 

ddSectionsasp:Dropdown其OnSelectedIndexChanged事件我試圖觸發。

這會觸發頁面級回發,但不會觸發ddSections_SelectedIndexChanged服務器端方法,我想要觸發。順便說一下,ddSections將被隱藏。

請您提供一些建議。 我花了三天的時間試圖找出這個問題,並且空手而歸。 爲了便於閱讀,請隨意重新格式化。 在此先感謝。

回答

0

我問了這個問題已經兩個星期了,我假設沒有人會回答,所以爲了記錄,我會發布我如何真正解決這個問題。

  1. 我改變了使用html表來使用無序列表。 (一個選項,我以前被忽略,因爲在造型的<UL>我認爲難度。

  2. 我添加了兩個隱藏字段,一個觸發事件是否已經解僱,以及一個存儲選定值。

<asp:HiddenField runat="server" ID="hidSelectionChanged" Value="false"/> <asp:HiddenField runat="server" ID="hidSelectionValue" Value=""/>

我創建了 「改變」 事件如下:

function onchange(param) { 
    var chg = document.getElementById('<%=hidSelectionChanged.ClientID%>'); 
    var val = document.getElementById('<%=hidSelectionValue.ClientID%>'); 

    if (chg) { 
     chg.value = 'true'; 
    } 
    if (val) { 
     val.value = param; 
    } 

    __doPostBack('pnlResults', ''); 
} 

然後在UL的每個LI我有這個代碼:

<li class="ddl_li"><a href="javascript:onchange('Summary_1')">Summary</a></li> 

結果是一整頁後回,但在Page_Load活動頁面,我現在可以檢查hidSelectionChanged.Value,看是否回傳是由我的下拉菜單觸發的,我可以檢查hidSelectionValue.Value以獲得選定的值。

最後,所有的工作都很好。

相關問題