无数次尝试,拼命搜索查资料,就这么个问题花去整整5小时,残念。。。
好歹现在解决了。
情况如下:
想实现类似于newegg,icson等网上商城的购物车模式,即在选购商品的页面A中,点击某些链接,把商品ID传入购物车页面B中,B页面根据此querystring中包含的ID向购物车容器添加此商品,然后购物车页面刷新到无querystring参数的页面状态下。此后每次在页面A中点击添加购物车链接,B页面始终在同一个标签页/窗口中刷新。
观察newegg的页面源代码,在页面A中的链接,是以js形式的window.open(url,windowName)进行窗口的触发。
可是问题出现:
在IE中,点击A页面中的链接,B页面的标签会闪一下,但是也没不做任何改动。后来在B页面的body中onload事件添加客户端方法后观察,发现每次A页面执行window.open时候B其实会重新load的,只不过不做任何回发postback。
而如果用手头的FF3,Chrome浏览器,则会达到期望效果。
研究了很久,很遗憾根本搜不出任何关于这个症状有用的信息,直到发现浏览器页面缓存的字眼,问题解决。
代码如下:
页面A:
<script type="text/javascript" >
function AddToCart(t, Width, Height) {
var newwindow = window.open('test.aspx?id=' + t, 'basketlist');
}
</script>
几种调用方法均可,残念啊,在没找到原因之前,啥都尝试过了...
<asp:HyperLink runat="server" NavigateUrl="javascript:AddToCart('a')" Text ="hyperlink" />
<a href ="javascript:AddToCart('a')" >test</a>
<a href ="#" onclick ="AddToCart('a')" >test</a>
<asp:Button id="btnTest" runat ="server" OnClientClick ="AddToCart('a')" />
页面B:test.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
if (Request.QueryString["id"] != null)
{
HttpCookie cookie = Request.Cookies["Cookie"] ?? new HttpCookie("Cookie");
cookie.Value = cookie.Value + Request.QueryString["id"];
Response.Cookies.Add(cookie);
Response.Redirect("test.aspx");
}
}
if (Request.Cookies["Cookie"] != null)
ltTest.Text = Request.Cookies["Cookie"].Value;
}
---
补充材料:
window.open方法的使用和重载