【问题标题】:Asp.Net (vb) Force Postback in code-behindAsp.Net (vb) 在代码隐藏中强制回发
【发布时间】:2010-10-29 05:34:14
【问题描述】:

我需要一种在代码隐藏中强制回发或重新加载页面的方法。尝试使用一些javascript,但没有让它工作。浏览网络我看到第一个问题是“为什么”?

情况是我在自动回发上有一个下拉列表,而 gridview 数据源的选择参数是从该下拉列表的选定值派生的。因此,页面可以正常工作,并且只要更改了所选项目,内容就会更新。但是有些链接和按钮会导致客户离开页面,以便他们稍后再链接回来。

这个想法是将最后一个选项存储在会话中,如果会话选项不是默认选项,则检查第一个 page.load 事件。现在我可以基于此更改下拉列表的 selectedindex,但显然数据源的触发速度比 page.load 快,所以除非我可以强制重新加载,否则这无济于事。

有什么想法吗?一个完整的页面回发/重新加载当然不是唯一的选择,仅仅强制网格视图/数据源刷新就足够了。除了重新加载整个页面之外,我只是不知道该怎么做。

谢谢。

【问题讨论】:

    标签: asp.net postback reload code-behind


    【解决方案1】:

    另一种方式,如果您仍在寻找回帖,请回复response.redirect("~/ImOnThisPageAlready"); 到同一页面。
    很简单,不确定你的网站有多忙,但它对我的小应用程序运行得非常快。

    【讨论】:

      【解决方案2】:

      我遇到了类似的问题...Kezzer 的解决方案对我有用。

      简单地说:

      Chart1.databind()
      

      在代码隐藏的 PreRenderComplete 事件中。

      由于 PreRender complete 在图表渲染之前作为最后一件事运行,因此如果您在此处“绑定”图表,它可以确保下拉菜单中直观“显示”的内容实际上是用作渲染你的图表。

      我们的问题是自动回发级联下拉菜单。我们有国家、州、城市下拉菜单。如果用户选择“美国”、“俄亥俄”、“克利夫兰”,一切正常,但如果他们返回并将国家更改为“法国”,则会在图表上导致错误,即使下拉菜单有自动为此更改进行了调整,并将州和城市重置为可用的第一个值。

      在 PreRenderComplete 中添加自动回发会强制图表“获取:自动更正下拉列表后的值...太棒了!

      【讨论】:

        【解决方案3】:

        感谢大家的帮助。我正准备听从 Cerebrus 的建议,但后来一位同事提出了不同的想法。注释行替换为未注释行,如下所示。

        --%> 选择参数>

        除此之外,我的第一篇文章中的所有内容都适用。在页面加载中,我检查了会话并将更改应用到 timevalueDropDownList 和以前一样。会话总是在 SelectedIndexChanged 事件等中更新。

        但与往常一样,回复中的好点子,我一定会在以后的类似问题中提及这些点子。我有很多这样的,但只是找到了其他方法,现在我可能不必这样做。 ;)

        【讨论】:

        • 查看我上面的答案...您应该可以在以编程方式设置下拉列表值后调用 YourGridview.DataBind()
        • 我实际上在将会话值设置为数据源后立即尝试了数据绑定,但没有成功。这是我认为的第一件事。老实说,我不确定我是否意识到在那之前将下拉列表放在 autopostback="true" 上。如前所述,我感谢所有答案,并且一如既往,我对你们投了赞成票。当我说我将来会在类似问题中检查这个线程时,我是认真的。我以前也这样做过,每次都这样。我只是来这里问一下什么时候有DL来,或者我已经被困太久了,反正我自己也想不出答案。 ;)
        【解决方案4】:

        为什么不处理 GridView 的 DataBinding 事件并在该处理程序中检查 Session 中的值?如果它不等于 dropdownlist 参数,您可以更改它并让数据绑定顺其自然。

        请参阅my answer here 以获取更一般的示例,该示例更改数据源控件的 SelectCommand。以同样的方式,您应该能够更改 ControlParameter 的值。 This answer 做同样的事情,但对于(嵌套的)中继器。

        如果这不起作用,那么 Eoin 的回答将是最好的方法(重新绑定 GridView)。

        【讨论】:

          【解决方案5】:

          为什么不能使用不同的页面事件?您是否尝试过 PreRenderComplete?请记住,事件的顺序在回发中很重要。 PreRenderComplete 是在呈现页面之前要调用的 last 事件。 Page_Load 实际上是在中间的某个地方。

          我在工作中一直在做这样的事情。

          Protected Sub Page_PreRenderComplete(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRenderComplete
              Session("Value") = ddlList.SelectedValue
          End Sub
          

          该代码可能不正确,但它只是让您了解事件。

          【讨论】:

            【解决方案6】:

            您可以在页面上放置一个 ajax 计时器,当它们返回时启用它,在页面呈现后立即导致 OnTick 自动回发,然后禁用它,但老实说...问题。

            为什么不能在以编程方式更改下拉列表值后重新绑定 GridView。例如时间线是这样的。

            • 人员返回页面(不是回发)
            • GridView 使用默认值绑定
            • 页面加载
              • 检查您的会话变量
              • 如果找到值
              • 设置您的 DropDownList 选定值
              • 再次调用.DataBind(),让GridView/DataSource强制重新绑定。

            【讨论】:

            • 该死的......你今天很开心! +1 :-)
            • 直接回答问题的简洁大方的解决方案。 +1!
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-02-18
            • 1970-01-01
            • 1970-01-01
            • 2010-11-15
            相关资源
            最近更新 更多