后台页面代码
protected int[] result = new int[14]; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { result = RunContext.Instance.FaultsCount(); } }
前台代码
<ul>
<li>正常站点:<%=result[8] %></li>
</ul>
<asp:Button ID="btn" runat="server" Text="单击" onclick="btn_Click" />
现象是第一次加载正常显示,点击按钮后回调result数据里的值没有了,因为是第二次加载,result初始化的代码不执行了
请问下这种问题怎么解决
第一次,走了这个代码:
if (!IsPostBack) { result = RunContext.Instance.FaultsCount(); }
当你点击button的时候,回调不走上面的代码,而且你的那个result 是实例的,也就是每次页面刷新都是新的。
这样,你可以用静态的保存,这样所有的人都可以访问这个界面都可以用到这个。
或者用session,viewstate 来保存
if (!IsPostBack) { result = RunContext.Instance.FaultsCount(); ViewState["result"] = result; }
改成这样结果一样不显示,请问下是怎么回事?
@越天:
你viewstate放在if里面,button点击的时候,不走if, 你的的那个result实例化了一个新的,没有任何的值,所以你怎么会有值显示呢? 你这个时候需要在button中把你的viewstate的值放到result中去,这样才行。
放if外面,你这没用服务器控件显示result,不会保存到ViewState里,因此每次Page_Load都要去重新取。
楼上是一种办法 还有种就是把
result = RunContext.Instance.FaultsCount(); 放到btn_click时间里面也是可以的
抱歉 本意是减少这个代码的执行
@越天:
if (!IsPostBack) { result = RunContext.Instance.FaultsCount(); ViewState["result"] = result; }
这句是页面第一次加载的时候才会调用
在走onclick事件的时候 不会再走if(!ispostback)哦
因此说在执行次数上并没有增加。