5

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

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

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

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

谢谢。

4

6 回答 6

9

您可以在页面上放置一个 ajax 计时器,在它们返回时启用它,在页面呈现后立即导致 OnTick 自动回发,然后禁用它,但老实说......对于一个微不足道的问题来说,这是一个可怕的工作。

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

  • 人员返回页面(不是回帖)
  • GridView 与默认值绑定
  • 页面加载
    • 检查您的会话变量
    • 如果找到一个值
    • 设置您的 DropDownList 选定值
    • 再次调用.DataBind()GridView/DataSource 以强制它重新绑定。
于 2009-05-27T10:06:01.687 回答
2

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

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

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

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

于 2009-05-27T10:19:59.723 回答
1

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

有关更改 Datasource 控件的 SelectCommand 的更通用示例,请参见我的答案。以同样的方式,您应该能够更改 ControlParameter 的值。这个答案是一样的,但是对于一个(嵌套的)中继器。

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

于 2009-05-27T10:28:37.023 回答
0

我有一个类似的问题...... Kezzer 的修复对我有用。

只是说:

Chart1.databind()

在代码隐藏中的 PreRenderComplete 事件中。

由于 PreRender complete 在图表渲染之前作为最后一件事运行,如果您在此处“绑定”图表,它可以确保在您的下拉列表中视觉“显示”的内容实际上将用作渲染图表的值.

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

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

于 2011-06-08T20:01:53.473 回答
0

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

<选择参数>
   <%--<asp:Parameter Name="timevalue" Type="String" DefaultValue="now" />--%>
   <asp:ControlParameter ControlID="timevalueDropDownList" PropertyName="SelectedValue" Name="timevalue" DefaultValue="now" />
</选择参数>

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

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

于 2009-05-27T11:08:31.217 回答
0

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

于 2012-03-27T22:39:39.537 回答