-2

我遇到了一个问题,我使用 jQuery 设置下拉列表(asp.net 服务器控件)的值,但它不会在回发时更改 selectedvalue。该控件不是数据绑定的,因此我认为该问题与被覆盖的更改无关。该控件位于 WizardControl 内部,我也认为这与该问题无关。在客户端,一切都按预期工作。

这是我的代码:

<asp:DropDownList runat="server" ID="MilitaryBackgroundSelect" ClientIDMode="Static">
    <asp:ListItem Text="" Value="" Selected="True" />                        
    <asp:ListItem Text="No" Value="0" />
    <asp:ListItem Text="YES, IN THE ARMED FORCES" Value="1" />
    <asp:ListItem Text="YES, IN THE RESERVES" Value="2" />
    <asp:ListItem Text="YES, IN THE NATIONAL GUARD" Value="3" />
    <asp:ListItem Text="REFUSED" Value="-7" />
    <asp:ListItem Text="DON'T KNOW" Value="-8" />
    <asp:ListItem Text="MISSING DATA" Value="-9" />
</asp:DropDownList>

我正在使用以下代码在客户端设置下拉列表:

 $(document).ready(function(){ 
      $('#MilitaryBackgroundSelect').val("1");
 });

注意:我在下拉列表中将 clientidmode 设置为静态,因此使用 jQuery 与它交互没有问题。下面是渲染的 HTML,注意 id 字段:

<select name="ctl00$ctl00$MainContent$MainContentNested$AHHQ_DataEntryWizard$MilitaryBackgroundSelect" 
id="MilitaryBackgroundSelect">
    <option value=""></option>
    <option selected="selected" value="0">No</option>
    <option value="1">YES, IN THE ARMED FORCES</option>
    <option value="2">YES, IN THE RESERVES</option>
    <option value="3">YES, IN THE NATIONAL GUARD</option>
    <option value="-7">REFUSED</option>
    <option value="-8">DON&#39;T KNOW</option>
    <option value="-9">MISSING DATA</option>
</select>
4

2 回答 2

2

因为您在服务器上运行它,所以您必须使用

<%= someObject.ClientID %>

而不是常规的 id

还要确保设置下拉列表的 jquery 代码在

 $(document).ready(function(){ 
      $('#militaryBackgroundSelect').val(-1);
 });

也许在更高版本的 jquery 上你可以使用

 $("#militaryBackgroundSelect option[value='-1']").attr("selected", "selected");
于 2012-12-28T17:48:07.827 回答
0

显然,使用 javascript 更改下拉列表不会触发更新的控件被发布回服务器(使用 fiddler2 验证)。我不确定为什么会这样,但有一些解决方法。

  1. 您可以使用隐藏字段,当您更改下拉列表值时,您也将更新隐藏值。这是我以前使用 jQuery 做的一个片段:

     $(document).ready(function(){ 
          $('#dropdownelelement').change(function() {
    
           var elementID = $(this).attr("id");
    
           $("#" + elementID + "hidden").val($(this).val());
    
           });   
    

    });

  2. 我查看了ASP.Net AJAX Toolkit组合框控件。它的工作方式与上面的方法类似,因为当它呈现给客户端浏览器时,它使用隐藏字段来存储其值。

最后我不得不拒绝这两种方法,因为根据用户输入启用或禁用哪个字段的某些逻辑有多复杂。我将代码放入更新面板,在驱动启用逻辑的控件上启用自动回发,并使用验证器控件来执行我的逻辑。它会导致令人讨厌的屏幕闪烁,但代码要简单得多。

感谢所有试图提供帮助的人。

于 2012-12-29T14:23:03.387 回答