【问题标题】:Force UpdatePanel to reload from master page强制 UpdatePanel 从母版页重新加载
【发布时间】:2019-07-12 21:45:50
【问题描述】:

我的母版页中有一个下拉菜单,在其SelectedIndexChanged 事件中,我希望它重新加载内容页的数据。我将内容页面的内容包含在 UpdatePanel 中,这样我就可以在母版页后面的代码中执行此操作:

Protected Sub ddlMyDropdown_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ddlMyDropdown.SelectedIndexChanged
    Session("NewVal") = ddlMyDropdown.SelectedValue
    upMyUpdatePanel.Update()
End Sub

然后在内容页面中我使用下拉设置的值并将其显示到屏幕上:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    lblMyLabel.Text = Session("NewVal")
End Sub

问题在于,当upMyUpdatePanel 更新时,它落后了一步,这意味着它反映了ddlMyDropdown 的值来自之前的一个SelectedIndexChanged 事件。我相信这是因为内容页的 Page_Load 事件在母版页的 SelectedIndexChanged 事件之前触发。

从母版页的下拉列表中选择新值时如何更新内容页的内容?

【问题讨论】:

    标签: asp.net vb.net updatepanel master-pages


    【解决方案1】:

    另一种方法是从内容页面做所有事情。

    在内容页面上您只需要 (C#):

    // find the ddl on the master page.
    DropDownList ddl = (DropDownList)Page.Master.FindControl("DropDownList1");
    // set the label's text.
    Label1.Text = ddl.SelectedValue;
    

    您不必设置会话数据。

    【讨论】:

    • 啊,我没有意识到我可以从内容页面访问母版页控件。我会在接受您的回答之前先尝试一下,但这应该可以解决我的问题。
    • 这解决了我为 OP 编写的问题的简化版本,但我的 SelectedIndexChanged 事件中有一些代码需要在内容页面更新之前触发。所以我最初的问题仍未得到解答:SelectedIndexChanged 事件之后如何更新内容页面的内容?我将编辑 OP 以更好地描述我的问题。
    【解决方案2】:

    如果我不需要SelectedIndexChanged 事件在代码在我的内容页面中运行之前触发,那么@wazz 的答案会解决我的问题。

    我通过将内容页面的 Page_Load 代码移动到 Page_PreRender 中解决了我的问题,以便它在母版页中的 SelectedIndexChanged 之后触发。可能并不理想,但效果很好。

    Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender
        'Do stuff...
    End Sub
    

    【讨论】:

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