我在页面上有两个感兴趣的控件:DropDownList
和Button
。如果用户按下按钮,他将获得一个弹出窗体,该窗体在完成后会导致基页完全重新加载,从而丢失DropDownList中的值。澄清一下,这是一次刷新,而不是回发。我不能改变它使它成为一个回发。在此页面刷新期间,在DropDownList中持久保存所选值的最简单方法是什么?我无法避免页面刷新,因为弹出窗口中输入的数据会反映在基页的其他位置。
更新
我拼凑了一个我不太满意的临时解决方案:当用户点击按钮时,我使用javascript获取下拉列表的当前值,并将查询字符串传递给正在加载的弹出窗口。当用户在弹出窗口中单击“保存”,导致数据被保存,然后重新加载基页时,我首先将查询字符串值存储到Session变量中。加载时,基页会查看所述Session变量。如果存在值,则相应地设置下拉列表的值并删除会话变量。
虽然有点笨拙,但这是我能想到的最好的。我知道我的Gracious Benefactors不喜欢使用Session变量,但鉴于页面重新加载,我无法想出替代方案。此外,由于Session变量是短暂的,在页面关闭之前不久创建,然后在打开后续页面后不久被删除,我希望这是可以接受的。
对比观点,反驳我的解决方案或推理,受到热烈欢迎。
结论
最后,在我向我的Gracious Benefactors描述解决方案后,我们同意了另一种方法:如果在DropDownList中进行选择,则必须在打开弹出窗口之前保存它。这完全避免了整个ViewState问题。
答案 0 :(得分:1)
有关更新的问题:
您尝试的解决方案听起来应该有效。这不是你想要使用SessionState的那种东西,但这里有一些要求使这种情况与众不同。
根据您重新加载基页的方式,您可以添加查询字符串,这样可以避免将hte值放入SessionState中。但我想你可能已经考虑过了。
但基本上,由于Postback值和viewstate是不可能的,SessionState和查询字符串只是你真正的选择。哦,除非你被允许使用HTML5本地存储? (可能不是)
在问题更新之前:
如果要回发aspnetForm,则应通过回发值自动保留该值。因此,首先要知道的是,您的表单是通过回发还是以其他方式刷新页面。
如果你不能回发主表单,那么rockinthesixstring表示Ajax帖子可能就是你所需要的。
另外,如果您正在做任何想要将数据源绑定到DropDownList或尝试自己保留selectedValue的事情,那么请检查并重新思考。