2012-02-09 88 views
0

在我的Web应用程序中,我有一个下拉列表和一个文本框。我想在下拉列表中禁用某些值的文本框。我编写了下拉列表中selectedIndexChanged事件的代码。我使下拉列表的AutoPostBack属性为true。下拉列表中的SelectedIndex属性

但是当我运行应用程序并从下拉列表中选择一个值时,它突然变为初始值。因此,我一直得到SelectedIndex的值0。我能为此做些什么?

+0

通过代码示例所需.. – 2012-02-09 11:20:12

回答

0

如果你在onPageLoad事件中的初始下拉列表,你必须检查它是否是回发,如果是的话,不要再次初始化它。

protected void OnLoad(object sender, EventArgs e) 
{ 
    if (!this.IsPostBack) 
    { 
     // init dropdownlist here 
    } 
} 
+0

我建议你对自己做一个规则:每次你动态地创建或者初始化(例如填充,设置其属性)服务器控件,尽最大努力在OnInit事件中执行此操作,并始终执行此操作(无论回发状态如何)。 OnLoad事件的目的是为编码人员提供一种操作已经加载的控件的方法,在OnInit中加载应该发生 - 简单地说。 – 2012-02-09 11:21:54

0

你在做什么回传来实现这是一个矫枉过正和缓慢。在该下拉列表中选择某些选项时,应该使用客户端脚本(javascript)来禁用文本框。取决于你是否使用普通的js或jquery或其他东西,这个实现会有所不同。

0

你可以非常容易地禁用文本框客户端,所以你为什么添加AutoPostBack属性到下拉列表。

如果您想通过添加此属性来做其他事情,请提供一些更多详细信息,以便我们根据您的需求给出最佳答案。

要禁用它的客户端,你可以按照下面给出的代码:

HTML:

<select name="ddlSample" id="ddlSample"> 
    <option value="1">Enable text box</option> 
    <option value="2">Disable text box</option> 
</select> 
<br /> 
<input name="txtCode" type="text" id="txtCode" /> 

JQuery的:

$("#ddlSample").change(function(){ 
    if($(this[this.selectedIndex]).val()=="1") 
    { 
     $("#txtCode").attr("disabled",false); 
     $("#txtCode").focus();  
    }  
    else 
    { 
     $("#txtCode").attr("disabled",true); 
    }  
});