我需要一种在代码隐藏中强制回发或页面重新加载的方法。尝试使用一些JavaScript,但没有让它工作。浏览网页我看到第一个问题是“为什么”?
情况是我在autopostback上有一个下拉列表,gridview数据源的select参数是从该下拉列表的选定值派生的。因此,页面正常工作正常,并且每当更改所选项目时内容都会更新。但是一些链接和按钮将客户从页面上移开,以便稍后链接回来。
我们的想法是将最后一个选项存储在会话中,并在会话选项不是默认值时检查第一个page.load事件。现在我可以根据它更改下拉列表的selectedindex,但显然数据源触发的速度比page.load快,所以除非我可以强制重新加载,否则这无济于事。
有什么想法吗?完整页回发/重新加载当然不是唯一的选择,只是强制gridview / datasource刷新就足够了。除了重新加载整个页面之外,我只是不知道该怎么做。
感谢。
答案 0 :(得分:9)
您可以在页面上放置一个ajax计时器,在它们返回时启用它,一旦页面呈现就会导致OnTick自动恢复,然后禁用它,但说实话......这对于一个微不足道的工作来说是一个可怕的工作问题
为什么不能在以编程方式更改下拉列表值后重新绑定GridView。例如时间线就像是。
.DataBind()
以使GridView / DataSource强制重新绑定。答案 1 :(得分:2)
为什么不能使用其他页面事件?你试过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
该代码可能不正确,但它只是让您了解事件。
答案 2 :(得分:1)
为什么不处理GridView的DataBinding事件并检查该处理程序中Session的值?如果它不等于dropdownlist参数,你可以改变它,让数据绑定顺其自然。
有关更改Datasource控件的SelectCommand的更一般示例,请参阅my answer here。以同样的方式,您应该能够更改ControlParameter的值。 This answer执行相同操作,但对于(嵌套)Repeater。
如果这不起作用,那么Eoin的答案将是最好的方法(重新绑定GridView)。
答案 3 :(得分:0)
感谢大家的帮助。我正要按照Cerebrus的建议,但后来一位同事提出了一个不同的想法。注释行被替换为未注释的行,如下所示。
<SelectParameters> <%--<asp:Parameter Name="timevalue" Type="String" DefaultValue="now" />--%> <asp:ControlParameter ControlID="timevalueDropDownList" PropertyName="SelectedValue" Name="timevalue" DefaultValue="now" /> </SelectParameters>
除此之外,我的第一篇文章中的所有内容都适用。在页面加载中,我检查了会话,并像以前一样将更改应用于timevalueDropDownList。会话始终在SelectedIndexChanged事件等中更新
但与往常一样,那里有好的想法和回应,我将在未来确定在类似的问题中提及这些。我有很多这些,但只是找到了其他方法,现在我可能没有。 ;)
答案 4 :(得分:0)
我遇到了类似的问题...... Kezzer的解决方案对我有用。
刚刚提出:
Chart1.databind()
代码隐藏中的PreRenderComplete事件。
由于PreRender完成运行是图表渲染之前的最后一件事,如果你在这里“绑定”你的图表,它确保你的下拉列表中的视觉“显示”实际上将被用作值的值渲染你的图表。
我们的问题在于自动回发级联下拉菜单。我们有国家,州,城市下拉列表。如果用户选择“美国”,“俄亥俄州”,“Clevland”,一切正常,但如果他们重新启动并将国家/地区更改为“法国”,则会导致图表出错,即使下拉列表已自动调整此更改,并将州和城市重置为可用的第一个值。
在PreRenderComplete中添加autopostback强制图表“获取:下拉列表自动更正后的值...真棒!
答案 5 :(得分:0)
另一种方式,如果您仍在寻找帖子,请在同一页面上执行response.redirect("~/ImOnThisPageAlready");
非常简单,不确定您的网站有多忙,但它对我的小应用程序来说非常快。