用于在ASP.NET中禁用下拉列表的Javascript

时间:2010-04-09 18:52:25

标签: asp.net javascript

我在ASP.NET 2005中使用JScript。我有一个带有复选框和下拉列表的页面。选中该复选框后,将禁用下拉列表。在回发页面期间,应保留此行为。我正在使用如下的javascript函数

if((chkOwner[1].checked==true))
{

   document.getElementById(ddlClientID).disabled=true;

   document.getElementById(ddlClientID).className = "form-disabled";

   document.getElementById(ddlClientID).selectedIndex = 0;
}

  else
 {

      document.getElementById(ddlClientID).disabled=false;

      document.getElementById(ddlClientID).className = "form-input";

      document.getElementById(ddlClientID).selectedIndex = 0;
}

这很有效。但是,回发后(未选中复选框时)不会保留下拉列表选择。 [它达到零指数的值]

显然解决方法是删除最后一行,即在else部分删除selectedIndex = 0.

但是,当我这样做时,禁用下拉列表(选中复选框时)在回发后无效。

你能帮帮我吗?

更多信息:我正在使用ClientScript.RegisterStartupScript在每次页面加载时检查这一点。

由于

Lijo

- CODE ----- 以下就是我的尝试。 (这是我刚刚创建的示例应用程序。它不起作用。这只能显示我想要实现的目标。)

 function ManageInputsFor()
 {  
        if((document.getElementById(chbx).checked==true)) 
        {
            document.getElementById(ddlClientID).disabled=true;
            document.getElementById(ddlClientID).className = "form-disabled";
            document.getElementById(ddlClientID).selectedIndex = 0;
        }
        else 
        {
          document.getElementById(ddlClientID).disabled=false; 
          document.getElementById(ddlClientID).className = "form-input"; 
          document.getElementById(ddlClientID).selectedIndex = 0; 
        }
 }

 protected void Page_Load(object sender, EventArgs e)
    {
        ClientScript.RegisterClientScriptBlock(Page.GetType(), "chbx", @"<script language=""javascript"" type=""text/javascript"">var chbx ='" + CheckBox1.ClientID + "'</script>");
        ClientScript.RegisterClientScriptBlock(Page.GetType(), "ddl", @"<script language=""javascript"" type=""text/javascript"">var ddlClientID ='" + DropDownList1.ClientID + "'</script>");
        ClientScript.RegisterStartupScript(Page.GetType(), "onLoadCallForManageInputs", @"<script language=""javascript"" type=""text/javascript"">ManageInputsFor();</script>");

        CheckBox1.Attributes.Add("onclick", "ManageInputsFor();");

    }

2 个答案:

答案 0 :(得分:0)

您必须在回复期间对复选框进行服务器端评估,并设置是否启用下拉列表。在后期操作期间,下拉列表的disabled属性不会发送到服务器(禁用时控件的值也不是btw)。

编辑:要保留回发中下拉列表中的值,您可以将所选值复制到另一个将被回发的控件,然后在服务器处理期间将值分配回下拉列表。

答案 1 :(得分:0)

基本上,当您使用javascript更改ASP控件的状态时,您的问题正在发生,该状态不会发布回服务器。你必须想办法发送它。使用隐藏控件或向查询字符串添加参数是两种这样的方法。