1

我正在尝试使用 AjaxToolKit 的 dropdownlistextender 构建一个下拉列表。我有以下标记:

<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';
}

其中itemitemOver是适当样式的 CSS 类。问题是我希望我的onclick事件在服务器上触发SelectedIndexChanged类型的事件。我试过这个功能:

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 将被隐藏。

请你提供一些建议。我花了三天时间试图弄清楚这一点,却空手而归。随意重新格式化以提高可读性。提前致谢。

4

1 回答 1

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', '');
}

然后在每个我都有LI这个UL代码:

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

结果是一个完整的页面回发,但是在Page_Load页面的情况下,我现在可以检查hidSelectionChanged.Value是否由我的下拉菜单触发了回发,并且我可以检查hidSelectionValue.Value以获取所选值。

最后,一切顺利。

于 2013-03-01T19:01:20.167 回答