即时生成SESSION页面传值问题
在A页面中,放了一个IMAGE控件,点击按钮,响应事件把IMAGEURL指向B页面。在B页面中,通过SOCKET通信,发送请求字符串,并接收服务器返回的二进制流文件,用 Response.BinaryWrite()输出。这时A页面出显示出了图像。
当服务器出现无法返回正确图片流文件时,就发送有几种错误信息,如:“PIC_ERROR”,“PIC_OUTER”等,问题是我怎样通过返回的错误信息的不同,在A页面上有所反应?
我是把错误信息解析后存入SESSION中,在A页面直接读取SESSION的值。现在是点击完A页面的按钮后不能马上读出SESSION的值。但若再点击次按钮就可以读出了,有没有什么办法能直接读出呢?或者有没有别的办法来实现?谢谢各位了 --------------------编程问答-------------------- 关注,帮顶吧. --------------------编程问答-------------------- 顶,解决马上结贴给分 --------------------编程问答-------------------- 用static变量试下
--------------------编程问答-------------------- A页面Page_Load里用IsPostBack()判断过吗? --------------------编程问答-------------------- protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Session["error_type"] != null)
{
Label1.Text = Session["error_type"].ToString();
}
}
}
还是不行,这回再点次按钮也没用了... --------------------编程问答-------------------- b/s 是无状态的,如果错误,不要指望能从服务端主动发送信息去客户端,你可以这样如果错误
b页面读取一个错误画面图像,然后binarywrite --------------------编程问答-------------------- 谢谢!我也想到了这样做,只是上面那种方法无法实现的原理我不太明白,以为可以解决呢 --------------------编程问答-------------------- 我也碰到过类似的问题,你试下
在开启b画面时候加一个 __doPostBack(eventTarget, eventArgument)
--------------------编程问答-------------------- 不好意思,能说具体点吗?加在什么位置?什么作用? --------------------编程问答-------------------- 在调用画面B的地方,我的是这样的(传的参数太多了,我删掉了,'ListAssistant1$btnQuery'就是调用我的这个用户控件的查询按钮,再做一次查询动作)
this.ClientScript.RegisterStartupScript(typeof(int), "1", "<script language=javascript>function ShowForm() {showModalDialog('SB010607M_Edit.aspx?。。。。edge: Raised; center: yes; help: no; resizable: no; status: no;self.location.href=self.location.href;'); __doPostBack('ListAssistant1$btnQuery','');}</script>");
this.ClientScript.RegisterStartupScript(typeof(int), "2", "<script language=javascript>window.attachEvent('onload',ShowForm)</script>"); --------------------编程问答-------------------- 我试着改了下,还是不行。A页面调用B页面代码如下:
protected void Button1_Click(object sender, EventArgs e)
{
ImageButton1.ImageUrl = "TCP.aspx";
this.ClientScript.RegisterStartupScript(typeof(int), "1", "<script language=javascript>function ShowForm() { __doPostBack('Button1','');}</script>");
}
楼上朋友帮我再看看哪错了? --------------------编程问答-------------------- 你的Session引用是放在哪个位置的?不可以放在页面A的Page_Load当中,因为这样页面A会先去找这个Session,当然第一次无法找到。 --------------------编程问答-------------------- 可是放在BUTTON1_CLICK下也点2次才出来 --------------------编程问答-------------------- 放到window.onload事件试试 --------------------编程问答-------------------- A这里会Load完整个页面,不是等B把图片读完以后才Load剩下的,你将ImageUrl链接到B,这里完成以后,就会直接跳过去检查Session,很明显在这段时间B还不可能得到错误,也就是说,A还在等这个Session。
如果要做也不是不可以。你可以试试看在设定了Url以后,
while (Session["ImageStatus"]==null);
if (!Session["ImageStatus"].ToString().Equals("OK"))
{
//清空Session为下一次准备
Session["ImageStatus"]=null;
// 图片设定出错,这里执行你指定的代码
}
在B中,每次设定好了图片,如没有错误,就用
Session["ImageStatus"]="OK";
不保证可以用,因为我自己没有试验过。 --------------------编程问答-------------------- 我和你遇到过相同的问题。
我是想像短消息那样的。 --------------------编程问答--------------------
那推技术是咋回事? --------------------编程问答-------------------- 从A到B,可以认为A为B的父窗口
执行完B页面操作用用JS刷新父窗口试试
补充:.NET技术 , C#