none
为什么用了updateplan还是会有刷新,请看源码 RRS feed

  • 问题

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


    <asp:DropDownList ID="ddlType" runat="server" AutoPostBack="true"
    onselectedindexchanged="ddlType_SelectedIndexChanged">
    </asp:DropDownList>

    <asp:UpdatePanel ID="uppItem" runat="server"
     UpdateMode="Conditional" RenderMode="Inline">
    <ContentTemplate>
    <asp:DropDownList ID="ddlItem" runat="server"></asp:DropDownList>
    </ContentTemplate>
    <Triggers><asp:AsyncPostBackTrigger ControlID="ddlType" /></Triggers>
    </asp:UpdatePanel>

    为什么我改变了第一个下拉菜单的值以后,整个页面还是会刷新呢?为何?

    2011年3月8日 3:47

答案

  • 呵呵,web控件,即可以放在updatepanel之内,也可以放在它之外的。放在外面,必须指定触发器,而都放在内面,则不用指定触发器。


    哦,没注意!我测了一下,没有问题。贴出我的测试代码:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
       
        </div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
            <ContentTemplate>
                <asp:DropDownList ID="DropDownList1" runat="server">
                    <asp:ListItem>1</asp:ListItem>
                    <asp:ListItem>2</asp:ListItem>
                </asp:DropDownList>
            </ContentTemplate>
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="DropDownList2"
                    EventName="SelectedIndexChanged" />
            </Triggers>
        </asp:UpdatePanel>
        <asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="True"
            onselectedindexchanged="DropDownList2_SelectedIndexChanged">
            <asp:ListItem>1</asp:ListItem>
            <asp:ListItem>2</asp:ListItem>
        </asp:DropDownList>
        </form>
    </body>
    </html>

    public partial class DD : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {

            }

            protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
            {
                this.DropDownList1.SelectedValue = this.DropDownList2.SelectedValue;
            }
        }

    2011年3月9日 7:22
    版主

全部回复

  • 因为changed事件,很 clientstcript是绑定的,是直接submit()
    2011年3月8日 4:02
    版主
  • 该如何修改,实现不刷新
    2011年3月8日 4:29
  • 去掉 AutoPostBack="true"
    onselectedindexchanged="ddlType_SelectedIndexChanged"
    2011年3月8日 4:35
    版主
  • 对不起,我没说清楚,这2个菜单是级联关系,只所以这样做,是为了第一个更改后,改变第二个菜单。不知道你要去掉 AutoPostBack="true"
    onselectedindexchanged="ddlType_SelectedIndexChanged"的目的是什么?那我还何必在外层套个updatepanel呢?我的要求就是,既不刷新页面,又要改变下拉菜单的值,你能实现吗?看来你没搞清楚问题的实质。
    2011年3月8日 5:35
  • postback一定会刷新页面的

    没有用过updatepanel 可以用js实现,先循环之前的droplist 然后判断attr checked是否为true ,在ajax这个值,并且给第二个select加赠option

    2011年3月8日 5:43
    版主
  • updatepanel已经封装好的东西,不想再写多余的代码实现。我自己再想办法,一定要用updatepanel来实现,虽然没解决我的问题,对于你的热心,表示感谢。

    2011年3月8日 5:56
  • UpdatePanel没有包裹ddlType。

     

    <asp:UpdatePanel ID="uppItem" runat="server"
     UpdateMode="Conditional" RenderMode="Inline">
    <ContentTemplate>


    <asp:DropDownList ID="ddlType" runat="server" AutoPostBack="true"
    onselectedindexchanged="ddlType_SelectedIndexChanged">
    </asp:DropDownList>

    <asp:DropDownList ID="ddlItem" runat="server"></asp:DropDownList>
    </ContentTemplate>
    <Triggers><asp:AsyncPostBackTrigger ControlID="ddlType" /></Triggers>
    </asp:UpdatePanel>

    2011年3月8日 13:52
    版主
  • 呵呵,web控件,即可以放在updatepanel之内,也可以放在它之外的。放在外面,必须指定触发器,而都放在内面,则不用指定触发器。
    2011年3月9日 6:32
  • 呵呵,web控件,即可以放在updatepanel之内,也可以放在它之外的。放在外面,必须指定触发器,而都放在内面,则不用指定触发器。


    哦,没注意!我测了一下,没有问题。贴出我的测试代码:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
       
        </div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
            <ContentTemplate>
                <asp:DropDownList ID="DropDownList1" runat="server">
                    <asp:ListItem>1</asp:ListItem>
                    <asp:ListItem>2</asp:ListItem>
                </asp:DropDownList>
            </ContentTemplate>
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="DropDownList2"
                    EventName="SelectedIndexChanged" />
            </Triggers>
        </asp:UpdatePanel>
        <asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="True"
            onselectedindexchanged="DropDownList2_SelectedIndexChanged">
            <asp:ListItem>1</asp:ListItem>
            <asp:ListItem>2</asp:ListItem>
        </asp:DropDownList>
        </form>
    </body>
    </html>

    public partial class DD : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {

            }

            protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
            {
                this.DropDownList1.SelectedValue = this.DropDownList2.SelectedValue;
            }
        }

    2011年3月9日 7:22
    版主