更新面板不更新内容

时间:2011-12-01 16:28:01

标签: asp.net ajax updatepanel

我从一段时间开始尝试这个,但我无法绕过它。以下是aspx页面显示的代码:

<!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">
    Test<br />
    <asp:DropDownList ID="DropDownList1" runat="server">
        <asp:ListItem>1</asp:ListItem>
        <asp:ListItem>2</asp:ListItem>
    </asp:DropDownList>
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
            <br />
            <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    </ContentTemplate>
    </asp:UpdatePanel>
    </form>
</body>
</html>

以下是button1点击事件的代码:

Public Class WebForm1
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    End Sub

    Protected Sub DropDownList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles DropDownList1.SelectedIndexChanged
        Label1.Text = DropDownList1.SelectedIndex

        UpdatePanel1.Update()

    End Sub
End Class
你可以告诉我我错过了什么。

4 个答案:

答案 0 :(得分:2)

在下拉列表中将autopostback设置为true。

真实的意思是:每次下拉列表中的值发生变化时,都会发生回发到服务器。

但请听Tim Schmelter的回答。如果下拉列表不会更改,最好将其放在更新面板之外,并且必须通过下拉菜单异步触发更新面板(如果您没有为更新面板设置触发器,则每次回发都会更新您的UpdatePanel中)。如果下拉列表的内容发生变化,请将其放在更新面板中。

但就像我说的那样,我很长一段时间都没有使用它,这是一个好主意,可以仔细检查我对这个主题所说的一切。 = P

PS:Microsoft Update面板易于开发,但会使您的网站速度变慢。尝试了解aspnet webservices和jQuery。

答案 1 :(得分:1)

您需要将Scriptmanager放在任何将使用它的控件之前。

所以把它放在你的下拉列表控件之上。 您还需要在下拉列表中将AutoPostBack属性设置为true,以便在其上触发selectedindexchange事件。

<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server" />

    Test<br />
    <asp:DropDownList ID="DropDownList1" runat="server" AutoPostback="true">
        <asp:ListItem>1</asp:ListItem>
        <asp:ListItem>2</asp:ListItem>
    </asp:DropDownList>

    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
            <br />
            <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    </ContentTemplate>
    </asp:UpdatePanel>
    </form>
</body>

答案 2 :(得分:1)

您忘记在DropDownList上将AutoPostback设置为True。默认值为False

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.autopostback.aspx

如果你想在UpdatePanel中触发Async-Postback,如果用户更改了DropDownList,你必须为UpdatePanel指定AsyncPostbackTrigger,因为DropDown不在其中。

<Triggers>
   <asp:AsyncPostBackTrigger ControlID="DropDownList1" EventName="SelectedIndexChanged" />
</Triggers>

除此之外,您需要将ScriptManager放在Ed said的开头。 在这里查看有关ASP.NET-Ajax的更多信息:

http://msdn.microsoft.com/en-us/magazine/cc163354.aspx

答案 3 :(得分:1)

下面是正确的标记,只需将其放到您的页面:

<!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">
    Test<br />
    <asp:DropDownList ID="DropDownList1" runat="server" AutoPostback ="True">
      <asp:ListItem>1</asp:ListItem>
      <asp:ListItem>2</asp:ListItem>
   </asp:DropDownList>
   <asp:ScriptManager ID="ScriptManager1" runat="server">
     <Triggers>
        <asp:AsyncPostBackTrigger ControlID="DropDownList1" 
               EventName="SelectedIndexChanged" />
    </Triggers>
  </asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <br />
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
</form>