ASP.NET刷新页面的六种方法

第一:
private void Button1_Click( object sender, System.EventArgs e )  
{
    Response.Redirect( Request.Url.ToString( ) );
}

第二:
private void Button2_Click( object sender, System.EventArgs e )  
{
    Response.Write( " <script language=javascript>window.location.href=document.URL; </script>" );
}

第三:
private void Button3_Click( object sender, System.EventArgs e )  
{
    Response.AddHeader( "Refresh","0" );
}

第四:
private void Button6_Click( object sender, System.EventArgs e )  
{  
    Response.Write( " <script language=javascript>window.location.reload( ); </script>" );
}

第五:(需替换<>)
<script><!--
var limit="3:00"
if ( document.images )
{
    var parselimit=limit.split( ":" )parselimit=parselimit[0]*60+parselimit[1]*1
}
function beginrefresh( )
{
    if ( !document.images )returnif ( parselimit==1 )window.location.reload( )else
    {
        parselimit-=1curmin=Math.floor( parselimit/60 )cursec=parselimit%60if ( curmin!=0 )curtime=curmin+"分"+cursec+"秒后重刷本页!"elsecurtime=cursec+"秒后重刷本页!"window.status=curtimesetTimeout( "beginrefresh( )",1000 )
    }
}
window.onload=beginrefresh//-->  </script><DIV style="Z-INDEX: 102;
LEFT: 408px;
POSITION: absolute;
TOP: 232px" ms_positioning="text2D">
<P><FONT size="3">自动刷新页面</FONT></P>
</DIV>

第六:
<meta http-equiv="refresh" content="300; url=target.html">

Fix a Bug of AjaxToolkit

在做NB88Game的时候,用的是ModalPopupExtender模式弹出框组件。ModalPopupExtender默认是随滚动条滚动Div的,但是其中有一个Div特别长,所以改变RepositionMode为None,但是无效。

经过一番查找,发现是一个Bug。在ModalPopupBehavior.js中的initialize函数中没有初始化position,而是用的固定值:this._foregroundElement.style.position = 'fixed';

在此函数最后加上以下这段初始化,一切OK了。哈哈:
var positioning = this.get_repositionMode();
        if ((positioning === AjaxControlToolkit.ModalPopupRepositionMode.RepositionOnWindowScroll) ||
(positioning === AjaxControlToolkit.ModalPopupRepositionMode.RepositionOnWindowResizeAndScroll)) {
            this._foregroundElement.style.position = 'fixed';
        } else {
            this._foregroundElement.style.position = 'absolute';
        }

Linq的LEFT JOIN和RIGHT JOIN方案

Linq只有join,就是inner join啦,只有用如下方案:

var result = from p in snsDC.NT_User
                         join q in snsDC.NT_Photo on p.Portrait equals q.PhotoID into pq
                         from r in pq.DefaultIfEmpty()
                         where userIDs.ToArray().Contains(p.UserID.ToString())
                         select new { p.UserID, p.UserName, r.FilePath };

Linq的Contains错误

今天用Linq的Contains实现SQL下(WHERE...IN)语句,有如下错误:
“方法“Boolean Contains(System.Guid)”不支持转换为 SQL。”

源代码如下:
var result = from p in snsDC.NT_User
                         join q in snsDC.NT_Photo on p.Portrait equals q.PhotoID into pq
                         from r in pq.DefaultIfEmpty()
                         where userIDs.Contains(p.UserID.ToString())
                         select new { p.UserID, p.UserName, r.FilePath };

分析:
估计是Linq无法将IList的Contains方法正确翻译为SQL语句。

改为:
var result = from p in snsDC.NT_User
                         join q in snsDC.NT_Photo on p.Portrait equals q.PhotoID into pq
                         from r in pq.DefaultIfEmpty()
                         where userIDs.ToArray().Contains(p.UserID.ToString())
                         select new { p.UserID, p.UserName, r.FilePath };

通过VS2008调试ASP.NET出现“Internet Explorer 无法显示该页面”问题

问题:
通过VS2008启动程序调试ASP.NET时报错。错误提示为:Internet Explorer 无法显示该页面。

分析:
首先,因为是新装的系统,觉得是端口问题。把杀毒软件、防火墙都关掉,并用netstat -an检查,一切正常。说明端口正常。
然后,随便ping的一下localhost。发现一解析到::1,而不是127.0.0.1。使用netstat -an,VS只有在ipv4上监听,而在ipv6上没有。终于找到问题所在了。

解决:
首先,以为是c:\windows\system32\drivers\etc\hosts文件设置。打开后发现没有有关::1的条目,设置如下这样也无效: 
127.0.0.1      localhost
::1
最后,实在没有办法,直接卸载ipv6算了:ipv6 uninstall。问题终于解决啦。

DataPager分页问题(点击两次)

今天碰到个怪问题,一直搞到半夜2点多。以下是解决办法:

今天看了一下ListView和DataPager配合做数据分页的教程,感觉很爽很方便,用在自己的项目上面时却出现了问题,具体表现在点击上一页、下一页或者数字跳转页面时通常要点两下才能有反应,而且有时候乱跳页。 

我开始测试的代码是这样的:

public partial class ListViewTest : System.Web.UI.Page
{
    
protected void Page_Load(object sender, EventArgs e)
    {
        
if (!Page.IsPostBack)
            BindData();
    }
    
    
protected void BindData()
    {
        DBDataContext db 
= new DBDataContext();
        var ds 
= db.Category;
        ListView1.DataSource 
= ds;
        ListView1.DataBind();
        db.Dispose();
    }
}

出现如开始提及的问题,找了半天原因也没有找到。后来在国外的一个论坛上找到了同病相怜的人,有专家给出了一个解决方案。把Page_Load里的数据绑定移到Page_PreRender中,也就是:

public partial class ListViewTest : System.Web.UI.Page
{
    
protected void Page_Load(object sender, EventArgs e)
    {
        
//if (!Page.IsPostBack)
        
//    BindData();
    }

    protected void Page_PreRender(object sender, EventArgs e)
    {
        BindData();
    }
    
    
protected void BindData()
    {
        DBDataContext db 
= new DBDataContext();
        var ds 
= db.Category;
        ListView1.DataSource 
= ds;
        ListView1.DataBind();
        db.Dispose();
    }
}

试了一下分页果然正常了。难道是Page_Load来的太迟?不得而知。另外,还有一种方法同样可行:

public partial class ListViewTest : System.Web.UI.Page
{
    
protected void Page_Load(object sender, EventArgs e)
    {
        
if (!Page.IsPostBack)
            BindData();
    }

    protected void Page_PreRender(object sender, EventArgs e)
    {
        
//BindData();
    }

    protected void ListView1_PagePropertiesChanging(object sender, PagePropertiesChangingEventArgs e)
    {
        DataPager1.SetPageProperties(e.StartRowIndex, e.MaximumRows, 
false);
        BindData();
    }

    protected void BindData()
    {
        DBDataContext db 
= new DBDataContext();
        var ds 
= db.Category;
        ListView1.DataSource 
= ds;
        ListView1.DataBind();
        db.Dispose();
    }
}