【问题标题】:SelectedIndex property of a drop down list下拉列表的 SelectedIndex 属性
【发布时间】:2012-02-09 11:13:48
【问题描述】:

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

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

【问题讨论】:

  • 需要示例代码..

标签: asp.net


【解决方案1】:

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

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

【讨论】:

  • 我建议您为自己制定一条规则:每次动态创建或以其他方式初始化(​​例如填充、设置其属性)服务器控件时,尽最大努力在 OnInit 事件中执行此操作,然后执行它总是(无论回发状态如何)。 OnLoad 事件的目的是为编码人员提供一种方法来操作已加载的控件,加载应该在 OnInit 中发生 - 简单地说。
【解决方案2】:

您正在使用回发来实现这一目标是一种矫枉过正且缓慢的做法。在该下拉列表中选择某些选项时,您应该使用客户端脚本 (javascript) 禁用文本框。根据您使用的是纯 js 还是 jquery 或其他东西,该实现会有所不同。

【讨论】:

    【解决方案3】:

    您可以非常轻松地禁用文本框客户端,所以为什么要将 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);
        }    
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-19
      • 1970-01-01
      相关资源
      最近更新 更多