在定义客户端事件时未调用dropdownlist服务器端事件

时间:2013-09-18 06:18:51

标签: c# asp.net .net

dropdownlist页面中有ImageButton.aspx。当用户选择国家澳大利亚时,需要显示一个ImageButton(一个标志图像),用户可以在点击它时将用户带到各自的网站。其他网站在内部托管,因此无需显示图像按钮。

为下拉列表定义了客户端和服务器端事件。

问题是此下拉列表的服务器端事件:OnSelectedIndexChanged="ddlSortBy_SelectedIndexChanged"未被调用。出了什么问题?

此外,正如在删除客户端事件时观察到的那样,然后调用服务器端事件。为什么这样 ?

<asp:DropDownList ID="ddlCountries" runat="server"
     AutoPostBack="true" onchange="return ddlCountriesSelected();"
     OnSelectedIndexChanged="ddlCountries_IndexChanged">
<asp:ListItem Text="_Select_" Selected="True"></asp:ListItem>
<asp:ListItem Text="Australia"></asp:ListItem>
<asp:ListItem Text="Spain"></asp:ListItem>
<asp:ListItem Text="England"></asp:ListItem>
<asp:ListItem Text="India"></asp:ListItem>
<asp:ListItem Text="Germany"></asp:ListItem>
</asp:DropDownList>

<asp:ImageButton ID="CountriesImage" runat="server" />

客户方:

<body>
<form id="form1" runat="server" >
  <script type="text/javascript">
   function ddlCountriesSelected() {
     var ddlCntrs = document.getElementById('<%=ddlCountries.ClientID %>');
     // alert(ddlCntrs.selectedIndex); // debug purpose
     if (ddlCntrs.selectedIndex == "1")
      {
        var img = document.getElementById('<%=CountriesImage.ClientID%>');
        img.src ='Images/'+ddlCntrs.options[ddlCntrs.selectedIndex].value+'.png';
        return true; 
       }
       else 
        {
           // code to hide the ImageButton
           return false;
        }    
        } 
       </script>
 ...
...
</body>

//代码背后

protected void ddlCountries_IndexChanged(object sender,System.EventArgs e)
    {
        lbl1.Text = ddlCountries.SelectedValue;
    }

4 个答案:

答案 0 :(得分:2)

希望以下代码能解决您的问题 -

<asp:DropDownList ID="ddlCountries" runat="server"
 AutoPostBack="true" OnSelectedIndexChanged="ddlCountries_IndexChanged" 
 onchange="ddlCountriesSelected();">
<asp:ListItem Text="_Select_" Selected="True"></asp:ListItem>
<asp:ListItem Text="Australia"></asp:ListItem>
<asp:ListItem Text="Spain"></asp:ListItem>
<asp:ListItem Text="England"></asp:ListItem>
<asp:ListItem Text="India"></asp:ListItem>
<asp:ListItem Text="Germany"></asp:ListItem>
</asp:DropDownList>

<asp:ImageButton ID="CountriesImage" runat="server" />

客户方:

<body>
<form id="form1" runat="server" >
  <script type="text/javascript">
   function ddlCountriesSelected() {
     var ddlCntrs = document.getElementById('<%=ddlCountries.ClientID %>');
     // alert(ddlCntrs.selectedIndex); // debug purpose
     if (ddlCntrs.selectedIndex == "1")
      {
        var img = document.getElementById('<%=CountriesImage.ClientID%>');
        img.src ='Images/'+ddlCntrs.options[ddlCntrs.selectedIndex].value+'.png';
       // return true; 
       }
       else 
        {
           // code to hide the ImageButton
          // return false;
        }    
    } 
   </script>
 ...
...
</body>

//后端代码

protected void ddlCountries_IndexChanged(object sender, EventArgs e)
{

    lbl1.Text = ddlCountries.SelectedValue;

}

确保添加标签..:D

答案 1 :(得分:0)

这里我建议您检查“ddlCountriesSelected”函数的返回值。 如果返回false,那么DropDownList控件也无法将页面发布到服务器上。 尝试通过java脚本函数在两种情况下返回“True”。

<script type="text/javascript">

function ddlCountriesSelected() {

  var ddlCntrs = document.getElementById('<%=ddlCountries.ClientID %>');

  if (ddlCntrs.selectedIndex == "1")
  {
      var img = document.getElementById('<%=ImageButton1.ClientID%>');
      img.src ='Images/'+ddlCntrs.options[ddlCntrs.selectedIndex].value+'.png';
      return true; 
  }
  else 
  {
      // code to hide the ImageButton
      return true;
  }    
} 
</script>

答案 2 :(得分:0)

是的,我有另一个想法给你。 请删除下拉控件的“onchange”事件。 另外我建议你在“ddlCountries_IndexChanged”事件处理程序中设置服务器上的Image控件的“src”。

答案 3 :(得分:0)

尝试在客户端和服务器端代码中进行以下修改,以便它可以正常工作

<body>
<form id="form1" runat="server" >
  <script type="text/javascript">
   function ddlCountriesSelected() {
     var ddlCntrs = document.getElementById('<%=ddlCountries.ClientID %>');
     // alert(ddlCntrs.selectedIndex); // debug purpose
     if (ddlCntrs.selectedIndex == "1")
      {
        var img = document.getElementById('<%=CountriesImage.ClientID%>');
        img.src ='Images/'+ddlCntrs.options[ddlCntrs.selectedIndex].value+'.png';
     return true; 
       }
       else 
        {
           // code to hide the ImageButton
         return true;
        }    
    } 
   </script>

... ...

//服务器端代码

protected void ddlCountries_IndexChanged(object sender, EventArgs e)
{

    lbl1.Text = ddlCountries.SelectedValue;

}