- 浏览: 248630 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
october731:
我也发现了这个问题,不知道如何解决。up
#if RELEASE(C# 预编译指令) -
bluky999:
个人觉得在概念上GUID与UUID是两个东东,有着不同的应用吧 ...
Python学习笔记四(GUID&UUID) -
gongmingwind:
效果不错啊
JQuery画图插件(flot) -
Tomzheng:
哥们厉害。继续总结,受教!
.NET WAP开发及兼容问题 -
cn_arthurs:
牛掰
JQuery画图插件(flot)
原文:http://blog.csdn.net/pc01/archive/2006/06/23/824872.aspx
在重写后的url里如果产生回发,例如有一个按钮,又调用了该被重写的aspx,用户浏览器中将会显示该aspx文件实际的地址,也就是http: //hostname/default.aspx?id=11。但从用户的角度考虑,如 果单击按钮时突然看到 URL 更改会使他们感到不安。因此必须解决这个问题。
解决方法有二:
(1)自己定义一个Actionlessform类,在aspx中不再使用系统提供的form 标记
namespace ActionlessForm {
public class Form : System.Web.UI.HtmlControls.HtmlForm
{protected override void RenderAttributes(HtmlTextWriter writer)
{
writer.WriteAttribute("name", this.Name);
base.Attributes.Remove("name");
writer.WriteAttribute("method", this.Method);
base.Attributes.Remove("method");
this.Attributes.Render(writer);
base.Attributes.Remove("action");
if (base.ID != null)
writer.WriteAttribute("id", base.ClientID);
}}}
创建此类并对其进行编译之后,要在 ASP.NET Web 应用程序中使用它,应首先将其添加到 Web 应用程序的 References 文件夹中。然后,要 使用它来代替 HtmlForm 类,做法是在 ASP.NET 网页的顶部添加以下内容:
<%@ Register TagPrefix="skm" Namespace="ActionlessForm"
Assembly="ActionlessForm" %>
然后,将 <form runat="server">(如果有)替换为:
<skm:Form id="Form1" method="post" runat="server">
并将右边的 </form> 标记替换为:
</skm:Form>
(2)以上的是继承个form,第二种方法就是继承page,这样你不需要在aspx页中改任何东西。
代码:
using System;
using System.IO;
using System.Web;
using System.Web.UI;
namespace URL
{
public class OLPage : Page
{
public OLPage()
{}
protected override void Render(HtmlTextWriter writer)
{
if (writer is System.Web.UI.Html32TextWriter)
{
writer = new FormFixerHtml32TextWriter(writer.InnerWriter);
}
else
{
writer = new FormFixerHtmlTextWriter(writer.InnerWriter);
}
base.Render(writer);
}}
internal class FormFixerHtml32TextWriter : System.Web.UI.Html32TextWriter
{
private string _url; // 假的URL
internal FormFixerHtml32TextWriter(TextWriter writer):base(writer)
{
_url = HttpContext.Current.Request.RawUrl;
}
public override void WriteAttribute(string name, string value, bool encode)
{
if (_url != null && string.Compare(name, "action", true) == 0)
{
value = _url;
}
base.WriteAttribute(name, value, encode);
}
}
internal class FormFixerHtmlTextWriter : System.Web.UI.HtmlTextWriter
{
private string _url;
internal FormFixerHtmlTextWriter(TextWriter writer):base(writer)
{
_url = HttpContext.Current.Request.RawUrl;
}
public override void WriteAttribute(string name, string value, bool encode)
{
if (_url != null && string.Compare(name, "action", true) == 0)
{
value = _url;
}
base.WriteAttribute(name, value, encode);
}}}
把这个文件编译成dll,并在你的项目中引用它。
然后把项目中的所有aspx文件对应的cs文件中的继承page类的代码改写为继承OLPage。
例如
public class WebForm1:page
改写为
public class WebForm1:URL.OLPage
(3)通过客户端代码清除form的action。
对于ASPX页面,我们在客户端查看代码时会发现,它自动为form加入了action,并且地址就是开头所说的原始页面地址。而对于ASPX页面,若当它的action为空时也就将回发到当前地址。这样我们就可以通过在客户端清除action的方法,来实现回发后继续保持有地址。
在页面中加入以下代码即可:
<script type="text/javascript">try{document.forms[0].action=""}catch(ex){}</script>
这种方法应是最简单的,而且也不用改动原来的代码。
在重写后的url里如果产生回发,例如有一个按钮,又调用了该被重写的aspx,用户浏览器中将会显示该aspx文件实际的地址,也就是http: //hostname/default.aspx?id=11。但从用户的角度考虑,如 果单击按钮时突然看到 URL 更改会使他们感到不安。因此必须解决这个问题。
解决方法有二:
(1)自己定义一个Actionlessform类,在aspx中不再使用系统提供的form 标记
namespace ActionlessForm {
public class Form : System.Web.UI.HtmlControls.HtmlForm
{protected override void RenderAttributes(HtmlTextWriter writer)
{
writer.WriteAttribute("name", this.Name);
base.Attributes.Remove("name");
writer.WriteAttribute("method", this.Method);
base.Attributes.Remove("method");
this.Attributes.Render(writer);
base.Attributes.Remove("action");
if (base.ID != null)
writer.WriteAttribute("id", base.ClientID);
}}}
创建此类并对其进行编译之后,要在 ASP.NET Web 应用程序中使用它,应首先将其添加到 Web 应用程序的 References 文件夹中。然后,要 使用它来代替 HtmlForm 类,做法是在 ASP.NET 网页的顶部添加以下内容:
<%@ Register TagPrefix="skm" Namespace="ActionlessForm"
Assembly="ActionlessForm" %>
然后,将 <form runat="server">(如果有)替换为:
<skm:Form id="Form1" method="post" runat="server">
并将右边的 </form> 标记替换为:
</skm:Form>
(2)以上的是继承个form,第二种方法就是继承page,这样你不需要在aspx页中改任何东西。
代码:
using System;
using System.IO;
using System.Web;
using System.Web.UI;
namespace URL
{
public class OLPage : Page
{
public OLPage()
{}
protected override void Render(HtmlTextWriter writer)
{
if (writer is System.Web.UI.Html32TextWriter)
{
writer = new FormFixerHtml32TextWriter(writer.InnerWriter);
}
else
{
writer = new FormFixerHtmlTextWriter(writer.InnerWriter);
}
base.Render(writer);
}}
internal class FormFixerHtml32TextWriter : System.Web.UI.Html32TextWriter
{
private string _url; // 假的URL
internal FormFixerHtml32TextWriter(TextWriter writer):base(writer)
{
_url = HttpContext.Current.Request.RawUrl;
}
public override void WriteAttribute(string name, string value, bool encode)
{
if (_url != null && string.Compare(name, "action", true) == 0)
{
value = _url;
}
base.WriteAttribute(name, value, encode);
}
}
internal class FormFixerHtmlTextWriter : System.Web.UI.HtmlTextWriter
{
private string _url;
internal FormFixerHtmlTextWriter(TextWriter writer):base(writer)
{
_url = HttpContext.Current.Request.RawUrl;
}
public override void WriteAttribute(string name, string value, bool encode)
{
if (_url != null && string.Compare(name, "action", true) == 0)
{
value = _url;
}
base.WriteAttribute(name, value, encode);
}}}
把这个文件编译成dll,并在你的项目中引用它。
然后把项目中的所有aspx文件对应的cs文件中的继承page类的代码改写为继承OLPage。
例如
public class WebForm1:page
改写为
public class WebForm1:URL.OLPage
(3)通过客户端代码清除form的action。
对于ASPX页面,我们在客户端查看代码时会发现,它自动为form加入了action,并且地址就是开头所说的原始页面地址。而对于ASPX页面,若当它的action为空时也就将回发到当前地址。这样我们就可以通过在客户端清除action的方法,来实现回发后继续保持有地址。
在页面中加入以下代码即可:
<script type="text/javascript">try{document.forms[0].action=""}catch(ex){}</script>
这种方法应是最简单的,而且也不用改动原来的代码。
发表评论
-
.NET WAP网站开发系列
2009-08-22 23:21 2767应德军兄的要求,完成了WAP2.0开发相关的文章。想想这个系统 ... -
Forms 身份验证顺序问题。
2006-09-01 10:46 583要求:对于特定目录,不允许匿名访问,但允许指定的用户pumab ... -
替换的效率测试(MS VS MY)
2007-08-29 19:20 603因为进来公司要给其他 ... -
Word 打印技巧
2007-10-20 17:13 588因为最近项目文档会议比较多,所以打印文档也就是常事情了。但发现 ... -
【转】解决大量图片造成的页面延迟
2007-11-05 18:36 696当页面上存在大量图片的时候,图片下载可能造成页面延迟。下面介绍 ... -
【原创】正则表达式 地址匹配(地区城市地址)
2007-11-15 23:43 3211项目中需要对商户所在地址进行匹配,关键是取出用户所在路名,用户 ... -
google 工具条无法安装【已解决】
2007-11-18 20:07 1277一个下午就折腾工具的工作了,不知道什么原因,安装google ... -
[转] 240多个jQuey插件
2007-12-09 15:01 637“jQuery 是继 prototype 之后又一个优秀的 J ... -
产品开发过程改进(网页设计师和网站工程师配合)
2007-12-13 22:31 778最近新的项目中我们改 ... -
用Javascript将图片等比例缩放
2008-01-03 23:51 1003并非原创,主要是产品部的需求。对网站商户图片进行等比例缩放。 ... -
Blogs统计工具,流量分析
2008-01-06 15:52 1323关于博客使用什么类型的统计工具,下文有很详细的介绍,我将最后的 ... -
C# override,new 的区别
2008-01-10 22:54 1261本来不想取这个标题的,但考虑到SEO上的问题,我还是决定使用这 ... -
C# 接口的显示实现和隐示实现
2008-01-12 15:14 1076接口的实现很多人都知道,但接口的实现方式分显示实现和隐示实现不 ... -
很好很实用的屏幕截图工具PicPick(屏幕尺)
2008-01-12 18:19 1725从小众上看到关于屏幕截图的软件PicPick,尝试的使用了一下 ... -
边框圆角的实现
2008-01-12 21:49 893对于圆角的实现不感兴趣,但最近公司的项目中涉及到这方面的内容, ... -
网站性能优化-GZIP压缩
2008-01-20 18:17 1660GZIP压缩其实就是将网页内容压缩,减少HTML代码网络传输的 ... -
未安装TCP/IP网络传输
2008-01-26 22:29 2351这几天都不开心,连我的PC也要和我开玩笑。发现电脑用了一段时间 ... -
DataRow.IsNull 判断 DBNull
2008-02-02 00:26 2853今天网站上线时碰到的一个问题。同事原来的做法将导致错误“对象不 ... -
Html特殊字符 记忆
2008-02-09 18:07 993平时会用的一些HTML特殊字符,但每次用的时候都不知道写。我 ... -
[过年札记]大年初二
2008-02-09 20:31 575在家待了一天,《网站 ...
相关推荐
【基于IIS层的IIRF实现URL重写 + 完美解决POSTBACK问题】 1.请在 Windows2003 操作系统环境下测试。 2.请确认您的IIS版本为 IIS6.0+ 。 3.请确认您已经将此项目的ASP.NET网站版本手动设置为 .NET 2.0. 4.请将Bin...
通过这个压缩包,开发者可以深入学习如何在IIS环境中配置和使用IIRF,理解URL重写的原理,同时掌握如何在ASP.NET应用中处理POSTBACK问题,进一步提升网站的用户体验和搜索引擎友好性。此外,源码的分析和实践也有助...
总结来说,解决***中URL重写后的页面回传问题,主要通过创建自定义页面基类和重写HtmlTextWriter的方法实现,从而保持URL重写的效果在页面回传操作中依然有效。通过修改Web.config配置,使得所有页面都使用这个...
但是,当试着点击页面中的按钮,我们马上会发现,页面postback后,浏览器地址栏中的链接变成了那个被重写后的地址,而不是,原来显示于地址栏的虚拟地址了。这是一个严重的不一致,没道理我点击页面的按钮,在没有...
这个"ASP.NET经典问题"的压缩包文件很可能是包含了开发者在实际开发过程中经常遇到的一些常见问题及其解决方案的集合。以下是一些可能涵盖的知识点: 1. **生命周期管理**:ASP.NET页面和控件具有特定的生命周期,...
由于View State存储了控件的状态,如果控件的文本是动态从资源文件加载的,那么在PostBack后也需要重新加载相应语言的资源。 6. URL重写与多语言: 为了提供友好的URL并方便SEO,可以结合URL重写技术实现多语言路由...
3. **视图状态(ViewState)**:ASP.NET Web Forms中的视图状态用于在页面间保留控件的状态信息,即使在PostBack(页面回发)过程中也能保持数据。在同学录系统中,视图状态可能用于保持用户在表单中填写的部分信息...
ASP.NET是微软公司推出的一种基于.NET Framework的服务器端网页开发技术,它允许开发者构建功能丰富的、高性能的Web应用程序。这份“不错的ASP.NET ppt课件”显然是一份详细讲解ASP.NET核心概念和技术的教程资料,...
10. **部署**:了解如何在IIS(Internet Information Services)上配置和部署Asp.Net应用程序是开发过程中的重要环节,涉及到发布设置、URL重写和配置管理等。 在学习Asp.Net的过程中,除了理解这些核心概念,还...
6. **PostBack机制**:ASP.NET Web Forms中的PostBack机制,允许用户与页面进行交互后,服务器端能够重新处理请求并更新页面内容。 7. **错误处理和调试**:在项目开发中,良好的错误处理和调试技巧是必不可少的,...
【ASP.NET技术详解】 ASP.NET是由微软公司推出的用于构建Web应用程序的框架,它基于.NET Framework,为开发者提供了高效、安全且可扩展的平台。在这个“十天学会ASP.NET”的教程中,你将深入理解这一强大的Web开发...
例程基于ASP.NET webforms框架,采用POSTBACK技术,展现了对数据库相关的各项操作与内容展示,并实现了分页显示。相关数据库请下载本人资源《中国省级区域概况-ASP.NET例程数据库(SQL2008R2)》...
在ASP.NET中,刷新界面是指重新加载或更新用户界面(UI)以便显示最新的数据或执行特定操作后的变化。这里我们将详细讨论标题和描述中提及的ASP.NET界面刷新的六种方法,并通过具体的代码示例来解释它们。 1. **...
在ASP.NET开发中,按钮失效问题是一个常见的挑战,尤其是在页面回发(Postback)和事件处理过程中。本文将深入探讨这个问题,并提供相应的解决方案。 首先,理解ASP.NET按钮失效的常见原因至关重要。通常,按钮失效...
6. **页面间通信**:包括查询字符串、URL重写、Session和Application状态,以及如何使用PostBack和Ajax实现异步更新。 7. **MVC框架**:ASP.NET MVC是一个轻量级、模型-视图-控制器架构,我们将会学习其设计模式、...
3. **ASP.NET核心概念**:生命周期管理、控件事件、视图状态、PostBack机制、路由和URL重写。 4. **ASP.NET Web Forms**:控件体系、数据绑定、用户控件、母版页。 5. **ASP.NET MVC**:模型-视图-控制器架构、路由...
4. **视图状态**:ASP.NET使用视图状态来在页面间保留控件的状态,即使在POSTBACK(页面回发)期间也能保持数据。 5. **Web Forms和MVC模式**:ASP.NET有两种主要的开发模型:Web Forms和MVC(Model-View-...
我们现在来看看ASP.NET整个Postback程序处理的过程。 首先我们通过一个Sample来看ASP.NET如何处理一个通过Click一个Button引起的Postback。下面是Web Page的HTML: 代码如下: <%@ Page Language=”C#” ...
在ASP.NET中,PostBack是指用户与页面上的控件交互后,服务器重新加载整个页面的过程。当使用Image按钮(实际上是ImageButton控件)时,每次点击都会触发PostBack,即使我们只想执行一次特定的操作。 问题的核心...
2. **视图状态(ViewState)**:ASP.NET默认使用ViewState来保存页面在多个Postback之间的状态。这使得服务器端控件可以保持其值,但也会增加页面大小。 3. **控件**:ASP.NET提供了大量内置控件,如TextBox、...