原来做的ClientNavigation没有注意只支持保存和恢复页面的scrollTop,今天发现有个应用还需要保存一下scrollLeft,于是就把ClientNavigation增了点肥,支持scrollLeft的save/load了。
原来做的
ClientNavigation没有注意只支持保存和恢复页面的scrollTop,今天发现有个应用还需要保存一下scrollLeft,于是就把ClientNavigation增了点肥,支持scrollLeft的save/load了。放在这里算是对
SmartNavigation系列文章的update吧。
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace Birdshome.Web.WebControls


{

/**//// <summary>
/// Summary description for ClientNavigation.
/// </summary>
[DefaultProperty("Text")]
[ToolboxData("<{0}:ClientNavigation runat=server></{0}:ClientNavigation>")]
public class ClientNavigation : WebControl, INamingContainer, IPostBackDataHandler

{

public ClientNavigation() : base()
{}

Properties#region Properties
public int PositionTop

{
get

{
object obj = ViewState["PositionTop"];
return obj == null ? 0 : (int)obj;
}
set

{
ViewState["PositionTop"] = value;
}
}
public int PositionLeft

{
get

{
object obj = ViewState["PositionLeft"];
return obj == null ? 0 : (int)obj;
}
set

{
ViewState["PositionLeft"] = value;
}
}
#endregion
protected override void Render(HtmlTextWriter writer)

{
this.RegisterClientScript();
writer.AddAttribute(HtmlTextWriterAttribute.Type, "hidden");
writer.AddAttribute(HtmlTextWriterAttribute.Id, this.ClientID);
writer.AddAttribute(HtmlTextWriterAttribute.Name, this.ClientID);
writer.AddAttribute(HtmlTextWriterAttribute.Value,
string.Format("{0}:{1}", this.PositionTop,this.PositionLeft));
writer.RenderBeginTag(HtmlTextWriterTag.Input);
writer.RenderEndTag();
}

Client Script#region Client Script
private void RegisterClientScript()

{
const string REGISTER_KEY = "__ClientNavigate586787__";
string strScript = @"
<script language=""javascript"">
window.attachEvent('onload', CLN_ClientNavigation);
function CLN_ClientNavigation()

{
{

var scrollTop =
{0};

var scrollLeft =
{1};
var scrollCount = 0;
do

{
{
scrollCount ++;
window.scrollTo(scrollLeft, scrollTop);
}}
while(document.body.scrollTop < scrollTop && scrollCount < 10 );
}}
document.body.onscroll = function()

{
{
var body = document.body;

document.all.
{2}.value = body.scrollTop + ':' + body.scrollLeft;
}}
</script>";
if ( !this.Page.IsStartupScriptRegistered(REGISTER_KEY) )

{
strScript = String.Format(strScript, this.PositionTop, this.PositionLeft, this.ClientID);
this.Page.RegisterStartupScript(REGISTER_KEY, strScript);
}
}
#endregion

IPostBackDataHandler interface#region IPostBackDataHandler interface
public void RaisePostDataChangedEvent()

{
// TODO: Add ClientNavigation.RaisePostDataChangedEvent implementation
}
public bool LoadPostData(string postDataKey, NameValueCollection postCollection)

{
bool modify = false;
string postData = postCollection[postDataKey];
if ( !StringHelper.IsEmpty(postData) )

{

string [] topleft = postData.Split(new char []
{':'});
int iPositionTop = int.Parse(topleft[0]);
int iPostionLeft = int.Parse(topleft[1]);
if ( iPositionTop != this.PositionTop )

{
this.PositionTop = iPositionTop;
modify |= true;
}
if ( iPostionLeft != this.PositionLeft )

{
this.PositionLeft = iPostionLeft;
modify |= true;
}
}
return modify;
}
#endregion
}
} 价格公道,童叟无欺,欢迎使用

。