【问题标题】:UpdatePanel ASyncPostBack troublesUpdatePanel ASyncPostBack 问题
【发布时间】:2012-07-10 16:56:50
【问题描述】:

我在 C#/ASP.NET 应用程序中使用 UpdatePanels 时遇到了一些问题。 我先贴出我的代码,然后再解释我的问题。

<asp:DropDownList ID="ddlSavedAddresses" runat="server" AutoPostBack="true">
<asp:ListItem Selected="True" Value="">Choose from your saved addresses: </asp:ListItem>
</asp:DropDownList>

<asp:UpdatePanel ID="upnlAddress" runat="server">
<Triggers>
    <asp:AsyncPostBackTrigger ControlID="ddlSavedAddresses" EventName="SelectedIndexChanged" />
</Triggers>
 <ContentTemplate>
 <div>
    <div class="minWidth490 topMargin10">
        <fieldset>
        <div>
            <label for="buildingName">Building Name</label>
        </div>
        <div>
            <asp:Textbox runat="server" id="txtBuildingName" CssClass="short" ToolTip="Enter your house name here" />
        </div>
    </div>
  </ContentTemplate>
</asp:UpdatePanel>

以上是我的.ascx文件文件。

this.ddlSavedAddresses.SelectedIndexChanged += new EventHandler(ddlSavedAddresses_SelectedIndexChanged);

void ddlSavedAddresses_SelectedIndexChanged(object sender, EventArgs e)
{
    // in my code, I have a breakpoint in this method, which is being hit
    this.txtBuildingName.Text = "FOO";
}

我的实际代码有比这更多的字段(我相信你收集到了),但它只是更多相同。

如上所述,事件正在触发,并且我在 ddlSavedAddresses_SelectedIndexChanged 中设置的任何断点都被命中。

我还对 this.txtBuidlingName 的 .Text 值进行了快速观察,它看起来像预期的那样是“FOO”,但是网页呈现的文本框的实际值仍然是空白的。

这是我的问题。无论如何,该值保持空白。如果我多次触发该事件(通过更改 DropDownList 的 SelectedIndex),它只会为我触发的每个事件填充一个“,”中的每个字段。

我相信我是短视的,这是微不足道的事情,但是,我很茫然,非常感谢您的帮助。

【问题讨论】:

  • 只是一个测试:在 SelectedIndexChanged 事件的末尾添加 upnlAddress.Update();。告诉我们它是否这样工作。另一件事:如果您将所选项目更改 5 次,txtBuildingName.Text 将是 ",,,,," 或只是 ","?
  • @daniloquio - 如果我触发该事件 5 次,那么 txtBuildingName.Text 将包含“,,,,”。每个事件一个。
  • 您是否有任何 javascript 可能会更改文本框的值?
  • 好的,现在我觉得我应该回到学校了。使用 UpdateMode="Conditional" 的 pnlAddress.Update 可以提供所需的行为。非常感谢 daniloquio。
  • @user1515466 很高兴您的问题得到解决。我会发表我的评论作为答案。如果您愿意,可以将我的答案标记为已接受的答案。

标签: c# asp.net .net ajax


【解决方案1】:

从 cmets 部分导入

  1. 在 SelectedIndexChanged 事件的末尾添加 upnlAddress.Update();
  2. UpdateMode="Conditional" 添加到您的 UpdatePanel 定义中。

【讨论】:

  • 我还可以补充一下,',被添加到文本字段是因为我在同一页面上有多个这样的 UserControl,但没有发送控件的 ClientIdMode到 ClientIdMode.AutoId.
【解决方案2】:

看来您需要调用更新面板的更新方法。 试试这个:

void ddlSavedAddresses_SelectedIndexChanged(object sender, EventArgs e)
{    
    this.txtBuildingName.Text = "FOO";
     upnlAddress.Update();
}

【讨论】:

    猜你喜欢
    • 2010-10-12
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多