none
新手关于c#网页编程中的DropDownList 控件不能触发SelectedIndexChanged? RRS feed

  • 问题

  • 已经在网上搜过,把dropdownlist2的autopostback改成true,还是无效,求高手指教,谢谢!

    网页代码

     <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                   <asp:ScriptManager ID="ScriptManager1" runat="server">
                   </asp:ScriptManager>
                   <asp:Button ID="Button3" runat="server" Text="新建角色" onclick="Button3_Click" />
            &nbsp;&nbsp;
            <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; charactar<asp:TextBox
                ID="TextBox7" runat="server" BackColor="Yellow"></asp:TextBox>
                   &nbsp;<asp:Label ID="Label4" runat="server" ForeColor="#FF3300" Text="L"></asp:Label>
                   <br />
                   <br />
                   模块 &nbsp;<asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="True"
                       onselectedindexchanged="DropDownList2_SelectedIndexChanged">
                       <asp:ListItem>permission1</asp:ListItem>
                       <asp:ListItem>permission2</asp:ListItem>
                       <asp:ListItem>permission3</asp:ListItem>
                       <asp:ListItem>permission4</asp:ListItem>
                       <asp:ListItem>permission5</asp:ListItem>
                       <asp:ListItem>permission6</asp:ListItem>
                       <asp:ListItem>permission7</asp:ListItem>
                       <asp:ListItem>permission8</asp:ListItem>
                       <asp:ListItem>permission9</asp:ListItem>
                   </asp:DropDownList>&nbsp; 单据/表单&nbsp;
                   <asp:DropDownList ID="DropDownList3" runat="server">
                   </asp:DropDownList>

    <br />
                   <br /> permission<uc2:charactarpermissionlistWebUserControl1
                ID="charactarpermissionlistWebUserControl11" runat="server" />
            &nbsp;&nbsp;&nbsp;
            <br />
            <br />
           
            <asp:Button ID="Button4" runat="server" Enabled="False" onclick="Button4_Click"
                Text="确定提交" />

    </ContentTemplate>
        </asp:UpdatePanel>

    事件代码如下,想用switch动态添加dropdownlist3的选项,以下写法正确吗?。

    protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
            {
                this.TextBox7.Text = "c1" + this.TextBox7.Text;
                this.Button4.Text = "ddd1" + this.Button4.Text;
                  switch (this.DropDownList2.SelectedIndex)
                {
                    case 0:
                        this.Button4.Text = "ddd00";                   
                      

                        this.DropDownList3.Attributes.Add("销售订单", "sellorder");
                       this.DropDownList3.Attributes.Add("销售合同", "sellcontract");
                          break;
                    case 1:
                        this.Button4.Text = "ddd01";
                        this.Response.Write("ddd");
                        break;
                    default:
                        this.Button4.Text = "ddd0d";
                        this.Response.Write("def");
                        break;
                }
                
        }

    2012年1月17日 5:51

答案

  •      <asp:ScriptManager ID="ScriptManager1" runat="server">
                   </asp:ScriptManager>


    应该放错位置,要放在网页<form>之后而不是UpdatePanel里面

     

     

    还有您不能在UpdatePanel内控件的事件中

    使用Response.Write();//程序会出错

    再来您要的需求

             this.DropDownList3.Attributes.Add("销售订单", "sellorder");
                       this.DropDownList3.Attributes.Add("销售合同", "sellcontract");

    改成↓试试看

     this.DropDownList3.Items.Add(new ListItem("销售订单", "sellorder"));
                    this.DropDownList3.Items.Add(new ListItem("销售合同", "sellcontract"));
    

     

    我试了您的代码,除了逻辑诡异外

    DropDownList2_SelectedIndexChanged事件是有被触发

     this.TextBox7.Text = "c1" + this.TextBox7.Text;//有执行此句



    2012年1月17日 6:15
  • 除了不能在UpdatePanel里使用Response.Write 外,您也可能参考

    与 UpdatePanel 控件不兼容的控件

    下面的 ASP.NET 控件与部分页更新不兼容,因此不应在 UpdatePanel 控件内使用:

    • 处于多种情况下的 TreeView 控件。一种情况是启用了不是异步回发的一部分的回调。另一种情况是将样式直接设置为控件属性,而不是通过使用对 CSS 样式的引用来隐式设置控件的样式。还有一种情况是 EnableClientScript 属性为 false(默认值为 true)。另外,还有一种情况是在异步回发之间更改了 EnableClientScript 属性的值。有关更多信息,请参见 TreeView Web 服务器控件概述

    • Menu 控件(将样式直接设置为控件属性,而不是通过使用对 CSS 样式的引用来隐式设置控件的样式时)。有关更多信息,请参见 菜单控件概述

    • FileUpload HtmlInputFile 控件(当它们作为异步回发的一部分用于上载文件时)。

    • GridView DetailsView 控件(当它们的 EnableSortingAndPagingCallbacks 属性设置为 true 时)。默认值为 false

    • Login PasswordRecoveryChangePasswordCreateUserWizard 控件(其内容尚未转换为可编辑的模板)。

    • Substitution 控件。

    若要在 UpdatePanel 控件内使用 FileUploadHtmlInputFile 控件,请将提交文件的回发控件设置为面板的 PostBackTrigger 控件。仅可以在回发方案中使用 FileUploadHtmlInputFile 控件。

    所有其他控件都可以在 UpdatePanel 控件内发挥作用。不过,在某些情况下,控件在 UpdatePanel 控件内可能不会按预期方式工作。这些情况包括:

    • 通过调用 ClientScriptManager 控件的注册方法注册脚本。

    • 在该控件呈现过程中直接呈现脚本或标记,例如,通过调用 Write 方法。

    如果该控件调用 ClientScriptManager 控件的脚本注册方法,则也许能够改用 ScriptManager 控件相应的脚本注册方法。在此情况下,该控件可以在 UpdatePanel 控件内工作。

     

    From :

    http://msdn.microsoft.com/zh-cn/library/Bb386454%28v=VS.90%29.aspx


    2012年1月17日 6:44

全部回复

  •      <asp:ScriptManager ID="ScriptManager1" runat="server">
                   </asp:ScriptManager>


    应该放错位置,要放在网页<form>之后而不是UpdatePanel里面

     

     

    还有您不能在UpdatePanel内控件的事件中

    使用Response.Write();//程序会出错

    再来您要的需求

             this.DropDownList3.Attributes.Add("销售订单", "sellorder");
                       this.DropDownList3.Attributes.Add("销售合同", "sellcontract");

    改成↓试试看

     this.DropDownList3.Items.Add(new ListItem("销售订单", "sellorder"));
                    this.DropDownList3.Items.Add(new ListItem("销售合同", "sellcontract"));
    

     

    我试了您的代码,除了逻辑诡异外

    DropDownList2_SelectedIndexChanged事件是有被触发

     this.TextBox7.Text = "c1" + this.TextBox7.Text;//有执行此句



    2012年1月17日 6:15
  • 你说得太对了,我的问题都解决了,谢谢!

    其实之前我在学习的过程中是知道不能加Response.Write();的,但毕竟经验不够,又重复错话行为了,是不是所有的AJAX中都不能加这个,那么多问一下,在AJAX中还有什么是不能用的,谢谢!

    • 已编辑 hzpemu 2012年1月17日 6:34
    2012年1月17日 6:31
  • 除了不能在UpdatePanel里使用Response.Write 外,您也可能参考

    与 UpdatePanel 控件不兼容的控件

    下面的 ASP.NET 控件与部分页更新不兼容,因此不应在 UpdatePanel 控件内使用:

    • 处于多种情况下的 TreeView 控件。一种情况是启用了不是异步回发的一部分的回调。另一种情况是将样式直接设置为控件属性,而不是通过使用对 CSS 样式的引用来隐式设置控件的样式。还有一种情况是 EnableClientScript 属性为 false(默认值为 true)。另外,还有一种情况是在异步回发之间更改了 EnableClientScript 属性的值。有关更多信息,请参见 TreeView Web 服务器控件概述

    • Menu 控件(将样式直接设置为控件属性,而不是通过使用对 CSS 样式的引用来隐式设置控件的样式时)。有关更多信息,请参见 菜单控件概述

    • FileUpload HtmlInputFile 控件(当它们作为异步回发的一部分用于上载文件时)。

    • GridView DetailsView 控件(当它们的 EnableSortingAndPagingCallbacks 属性设置为 true 时)。默认值为 false

    • Login PasswordRecoveryChangePasswordCreateUserWizard 控件(其内容尚未转换为可编辑的模板)。

    • Substitution 控件。

    若要在 UpdatePanel 控件内使用 FileUploadHtmlInputFile 控件,请将提交文件的回发控件设置为面板的 PostBackTrigger 控件。仅可以在回发方案中使用 FileUploadHtmlInputFile 控件。

    所有其他控件都可以在 UpdatePanel 控件内发挥作用。不过,在某些情况下,控件在 UpdatePanel 控件内可能不会按预期方式工作。这些情况包括:

    • 通过调用 ClientScriptManager 控件的注册方法注册脚本。

    • 在该控件呈现过程中直接呈现脚本或标记,例如,通过调用 Write 方法。

    如果该控件调用 ClientScriptManager 控件的脚本注册方法,则也许能够改用 ScriptManager 控件相应的脚本注册方法。在此情况下,该控件可以在 UpdatePanel 控件内工作。

     

    From :

    http://msdn.microsoft.com/zh-cn/library/Bb386454%28v=VS.90%29.aspx


    2012年1月17日 6:44
  • Hi hzpemu,

    欢迎来到MSDN论坛!

    关于ASP.NET的问题,您可以去下面的论坛发帖:
     ASP.NET 与 AJAX 
    http://social.msdn.microsoft.com/Forums/zh-CN/295/threads

    您也可以考虑下面的英文论坛:

    http://forums.asp.net/

    谢谢您的理解!

    祝,顺利!

    yoyo


    Yoyo Jiang[MSFT]
    MSDN Community Support | Feedback to us
    2012年1月18日 6:51
    版主