热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SmartNavigation超级瘦身减肥苗条版ClientNavigation

在我的上两片文章中我介绍了Page类的SmartNavigation属性的实现(.NETFramework1.12.0中SmartNavigation的实现),M$虽
在我的上两片文章中我介绍了Page类的SmartNavigation属性的实现(.NET Framework 1.1/2.0中 SmartNavigation的实现),M$虽然实现的非常的巧妙,但是这样的“偷梁换柱”同时也带来了一些负面的影响。他们主要表现在这几个方面:
1、页面不能再使用浏览器提供的forward和backward,因为这两个动作作用在window.document对象上,而我们实际提交的页面是这个document里的IFrame,它是不能被f&b的。这个问题挺郁闷的,因为用户不能backward,在提交的时候会丢失很多第一次未能提交成功的表单信息;
2、给调试程序代来麻烦,我们看不到当前页面真正的HTML源码,因为服务器response的信息也还是IFrame中,我们只能看到doucment中陈旧的信息;
3、对于原始页面使用了动态生成html对象的情况,SmartNavigation是肯定出问题的。就是页面更新后,由于doucment实际没有更新,IFrame里也没有处理到动态生成的Html对象。
4、兼容性,目前的SmartNavigation都没有考虑兼容性问题,像Opera, Konqueror等浏览器,不能正确地Navigate;
5、不能获取Request.UrlReferrer引用,UrlReferrer总是空;
6、对于提交表单后,使用rander一段alert(...)来产生对用户提示的页面,在使用SmartNavigation的页面时,提交后不能显示预期的alert窗口;
7、对一些特殊符号的提交产生bug,比如在使用SmartNavigation的页面中,如果向TextBox中写入一个“`“(按一下Esc下面那个键)开头的值。Submit后,TextBox会消失掉,在Submit一下,TextBox出现,但里面的值已经没有了;
8、页面中写在内的CSS styesheet,在第一次Submit后就会丢失,这个从1.1的SmartNavigation源代码里可以看到,他在处理时,只处理了和;
9、DefaultRedirect属性不能正确执行,这个可以查看M$的KB813831。
总的说来,SmartNavigation的出现还是不错的,不过由于它真正的复杂,也同时导致了不少的问题。所以使用SmartNavigation功能一定要慎重,同时对于太复杂并内嵌大量JScript脚本的页面,就不要考虑了。

罗嗦了半天,真正的主角还没有出场,真是失败。下面就就来看看我的“SmartNavigation“的超级瘦身减肥苗条版:
其实也太简单了,就是记录Post时的ScrollTop,Response后在set这个ScrollTop到提交时的位置,不过我做了一个控件,拖到页面上就让该页面具有Navigate的功能了。代码如下:
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.Design;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace Birdshome.Web.UI.WebControls
{
///
/// Summary description for Class1.
///
[Designer(typeof(Birdshome.Web.UI.Design.ClientNavigationDesigner))]
[ToolboxData("<{0}:ClientNavigation runat&#61;"server">")]
public class ClientNavigation : WebControl, INamingContainer, IPostBackDataHandler
{
public ClientNavigation() : base() {}

public int Position
{
get
{
object obj &#61; ViewState["Position"];
return obj &#61;&#61; null ? 0 : (int)obj;
}
set
{
ViewState["Position"] &#61; value;
}
}

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, this.Position.ToString());
writer.RenderBeginTag(HtmlTextWriterTag.Input);
writer.RenderEndTag();
}

private void RegisterClientScript()
{
const string REGISTER_KEY &#61; "__ClientNavigate586787__";
string strScript &#61; &#64;"
";
if ( !this.Page.IsStartupScriptRegistered(REGISTER_KEY) )
{
strScript &#61; String.Format(strScript, this.Position, this.ClientID);
this.Page.RegisterStartupScript(REGISTER_KEY, strScript);
}
}

IPostBackDataHandler Members
}
}
这个ClientNavigation有个问题&#xff0c;就是可以拖多个到一个页面&#xff0c;虽然不影响使用&#xff0c;但不知道有没有好办法能让控件只能在一个Page上最多放一个呢?

本文转自博客园鸟食轩的博客&#xff0c;原文链接&#xff1a;http://www.cnblogs.com/birdshome/&#xff0c;如需转载请自行联系原博主。




推荐阅读
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
  • 在配置Nginx的SSL证书后,虽然HTTPS访问能够正常工作,但HTTP请求却会遇到400错误。本文详细解析了这一问题,并提供了Nginx配置的具体示例。此外,还深入探讨了DNS服务器证书、SSL证书的申请与安装流程,以及域名注册、查询方法和CDN加速技术的应用,帮助读者全面了解相关技术细节。 ... [详细]
  • NFT市场热度持续攀升,波卡能否抓住机遇迎来NFT夏季热潮?
    NFT市场热度持续攀升,波卡能否抓住机遇迎来NFT夏季热潮? ... [详细]
  • 在现代Web开发中,许多网站采用伪静态技术,如URL以.html或.shtml结尾,以提升用户体验和搜索引擎优化。MVC框架中的路由机制能够轻松实现这一功能。通过配置默认路由并添加伪静态路由规则,MVC框架按照从上到下的顺序进行路由匹配,确保请求被正确处理。此外,这种机制还支持灵活的自定义路由,进一步增强了应用的可扩展性和维护性。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • 本文探讨了使用JavaScript在不同页面间传递参数的技术方法。具体而言,从a.html页面跳转至b.html时,如何携带参数并使b.html替代当前页面显示,而非新开窗口。文中详细介绍了实现这一功能的代码及注释,帮助开发者更好地理解和应用该技术。 ... [详细]
  • 利用爬虫技术抓取数据,结合Fiddler与Postman在Chrome中的应用优化提交流程
    本文探讨了如何利用爬虫技术抓取目标网站的数据,并结合Fiddler和Postman工具在Chrome浏览器中的应用,优化数据提交流程。通过详细的抓包分析和模拟提交,有效提升了数据抓取的效率和准确性。此外,文章还介绍了如何使用这些工具进行调试和优化,为开发者提供了实用的操作指南。 ... [详细]
  • 如何撰写初级和高级前端开发者的专业简历
    如何撰写初级和高级前端开发者的专业简历 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • 在Eclipse中提升开发效率,推荐使用Google V8插件以增强Node.js的调试体验。安装方法有两种:一是通过Eclipse Marketplace搜索并安装;二是通过“Help”菜单中的“Install New Software”,在名称栏输入“googleV8”。此插件能够显著改善调试过程中的性能和响应速度,提高开发者的生产力。 ... [详细]
  • 基于Linux系统的Kickstart自动化服务器部署方案
    本文针对企业需求,提出了一种基于Linux系统的Kickstart自动化服务器部署方案。该方案旨在通过无盘批量安装操作系统,提高企业IT基础设施的部署效率。Kickstart是一种利用Anaconda工具实现服务器自动化安装的技术,能够显著简化和加速操作系统的安装过程。通过详细的实施规划,本文介绍了Kickstart的工作原理及其在实际部署中的应用,为企业提供了高效的自动化部署解决方案。 ... [详细]
  • 在HTML和CSS中,可以通过多种方法将按钮设置为超级链接或实现超链接的按钮样式。一种常见方法是在按钮元素中嵌入``标签,利用CSS进行样式调整,使其外观和行为类似于按钮。另一种方法是使用JavaScript来实现点击按钮时跳转到指定链接的功能。通过这些技术,可以轻松地创建既美观又功能强大的交互式按钮。 ... [详细]
author-avatar
隔岸观火2502884207
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有