我遇到了一个问题,我使用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设置为static,所以我没有使用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'T KNOW</option>
<option value="-9">MISSING DATA</option>
</select>
答案 0 :(得分:2)
因为您在服务器上运行它,所以必须使用
<%= someObject.ClientID %>
而不是常规ID
还要确保设置下拉列表的jquery代码在
之内 $(document).ready(function(){
$('#militaryBackgroundSelect').val(-1);
});
也许在后来的jquery版本中你可以使用
$("#militaryBackgroundSelect option[value='-1']").attr("selected", "selected");
答案 1 :(得分:0)
显然,使用javascript更改下拉列表不会触发更新后的控件回发到服务器(使用fiddler2验证)。我不确定为什么会这样,但有一些解决方法。
您可以使用隐藏字段,当您更改下拉列表值时,您还将更新隐藏值。这是我过去使用jQuery做的一段代码:
$(document).ready(function(){
$('#dropdownelelement').change(function() {
var elementID = $(this).attr("id");
$("#" + elementID + "hidden").val($(this).val());
});
});
我查看了ASP.Net AJAX Toolkit组合框控件。它与上面的方法类似,因为当它呈现给客户端浏览器时,它使用隐藏字段来存储其值。
最后,我不得不拒绝两种方法,因为根据用户输入,某些逻辑对于启用或禁用哪个字段有多复杂。我将代码放入更新面板,在驱动已启用逻辑的控件上启用自动后备,并使用验证器控件来强制执行我的逻辑。它导致令人讨厌的屏幕闪烁,但代码更简单。
感谢所有试图提供帮助的人。