URL 重写是截取传入 Web 请求并自动将请求重定向到其他 URL 的过程。
  比如浏览器发来请求hostname/101.aspx ,服务器自动将这个请求中定向为http://hostname/list.aspx?id=101。

url重写的优点在于:
    缩短url,隐藏实际路径提高安全性
    易于用户记忆和键入。
    易于被搜索引擎收录

二 实现url重写的基本方法
   下载MS的URLRewriter.dll,放到你的web程序的bin下
下载地址1:http://www.rickel.cn/uploads/DevTools/MSDNURLRewriting.msi
下载地址2:download.microsoft.com/download/0/4/6/0463611e-a3f9-490d-a08c-877a83b797cf/MSDNURLRewriting.msi

下载完成后,在web.config里设置如下:
<?xml version="1.0" encoding="utf-8" ?>
<!--overred-->
<configuration>
    <configSections>
        <section name="RewriterConfig"type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
    </configSections>
    <RewriterConfig>
        <Rules>
            <RewriterRule>
                <LookFor>~/d(\d+)\.aspx</LookFor>
                <SendTo>~/default.aspx?id=$1</SendTo>
            </RewriterRule>
        </Rules>
    </RewriterConfig>
    <system.web>
        <httpHandlers>
            <add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
        </httpHandlers>
   
</system.web>
</configuration>


其中
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />

用于指定配置节"RewriterConfig"的处理程序类的名称为”URLRewriter.Config.RewriterConfigSerializerSectionHandler”,该类存在于bin目录下的URLRewriter .dll文件中

关键的是这两句
<LookFor>~/d(\d+)\.aspx</LookFor>
<SendTo>~/default.aspx?id=$1</SendTo>

<LookFor>~/d(\d+)\.aspx</LookFor>
表示,用户输入的url,d(\d+)\.aspx是 url中文件名匹配的正则表达式(此处为字母d开头,后面跟一个或多个数字,并以.aspx结尾。用户也可根据自己的需要自行设定)。
<SendTo>~/default.aspx?id=$1</SendTo>
,表示当服务器接收到符合上面条件的请求后如何重写url。此处表示访问defalutl.aspx并传入参数id,其值$1将用用户请求的文件名中的第一个数字来表示。
例如用户输入 hostname/d11.aspx,服务器会把他重写为http://hostname/default.aspx?id=11。换句话说用户输入http: //hostname/d11.aspx,实际访问的是http://hostname/default.aspx?id=11。这样就起到了隐藏真实文件名,并便于用户记忆的作用。

处理回发
在重写后的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)第二种方法就是继承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


这样就解决回发问题。
posted @ 2008-01-16 10:13 胡枫 阅读(191) 评论(1) 编辑
posted @ 2008-01-12 21:53 胡枫 阅读(168) 评论(0) 编辑

/*—————————————————
       作者:阿辛(Xinple)
       时间:2005-11-4 00:21
       地点:http://xinple.org
  ————————————————-*/

    今天晚上收到过眼的博客-行走在此间的一封Email,问我怎样实现一个类似下面的效果:

 


1.听周杰伦这孩子最新专辑的主打歌,已经几日了,原来是睡在旁边的室友一天到晚放的就是这歌,嘿嘿,是《11月的肖邦》!咋10月就出来了?香港有人bt被法院判了!美国下令关闭电驴服务Cao!
我对于周杰伦的歌没有多少兴趣,只是图个新鲜,来吧,荡下来很快的喔

 

  2.一直很想看得杜妻疯的《黑社会》终于出来了,经过广电总局的妙手,现在成了《龙城岁月》,根本失去了原有的味道,还剪去了10多分钟的戏份,可想而知,这10多分钟是对咱们祖国的青少年存在严重的误导可能,对于咱们的精神文明建设会起到严重的阻碍广电总局英明!不过要看的去bt荡下来吧,趁着现在bt还不是咱们这政权严打的对象…



他想textarea来实现,但是textarea的效果就是这样的:

 

发现不同了吗? 恩,使用textarea的话,HTML标签是不能工作的,因为textarea本来就是一个用来让你输入多行文本的表单,例如wordpress默认的日志撰写区域就是一个textarea,它可以直接输入任何HTML标签,不过可以使用属性readonly来让它不能写入文本。
例如

  1. <textarea cols="2" rows="6" readonly></textarea>

那么怎样实现在类似textarea在指定区域内滚动显示多行文本呢? 一个就是使用javascript,相信大家都用过那些“所见即所得”编辑器吧?其实他们大多就是使用JS来设置textarea的。可是现在问题是写JS比较麻烦,而且,textarea是用来输入数据的表单,而不是用来显示数据的。

比较好的解决方法就是使用div+CSS来搞定了。
CSS有个属性: overflow

语法:
overflow : visible | auto | hidden | scroll

 

参数:
visible :  不剪切内容也不添加滚动条。假如显式声明此默认值,对象将被剪切为包含对象的window或frame的大小。并且clip属性设置将失效
auto :  此为body对象和textarea的默认值。在需要时剪切内容并添加滚动条
hidden :  不显示超过对象尺寸的内容
scroll :  总是显示滚动条

说明:
检索或设置当对象的内容超过其指定高度及宽度时如何管理内容。
设置textarea对象为hidden值将隐藏其滚动条。
对于table来说,假如table-layout属性设置为fixed,则td对象支持带有默认值为hidden的overflow属性。如果设为hidden,scroll或者auto,那么超出td尺寸的内容将被剪切。如果设为visible,将导致额外的文本溢出到右边或左边(视direction属性设置而定)的单元格。
自IE5开始,此属性在MAC平台上可用。

那么,开始提出的那种效果可以这样实现:

  1. <div style="overflow: scroll; width: 382px; height: 160px;"> 
  2. 1.听周杰伦这孩子最新专辑的主打歌,已经几日了,原来是睡在旁边的室友一天到晚放的就是这歌,嘿嘿,是《<strong>11月的肖邦》!咋10月就出来了?</strong><em>香港有人bt被法院判了!美国下令关闭电驴服务</em><strong>Cao!</strong>
  3. 我对于周杰伦的歌没有多少兴趣,只是图个新鲜,来吧,<strong>荡下来很快的喔</strong>
  4.  
  5. 2.一直很想看得<strong>杜妻疯的《黑社会》</strong>终于出来了,经过<strong>广电总局的妙手</strong>,现在成了<strong>《龙城岁月》,</strong>根本失去了原有的味道,还剪去了<strong>10多分钟的戏份</strong>,可想而知,这10多分钟是<em>对咱们祖国的青少年存在严重的误导可能,对于咱们的精神文明建设会起到严重的阻碍</em><strong>广电总局英明!</strong>不过要看的去bt荡下来吧,<strong>趁着现在bt还不是咱们这政权严打的对象...</strong> 
  6. </div>

效果:

1.听周杰伦这孩子最新专辑的主打歌,已经几日了,原来是睡在旁边的室友一天到晚放的就是这歌,嘿嘿,是《11月的肖邦》!咋10月就出来了?香港有人bt被法院判了!美国下令关闭电驴服务Cao!
我对于周杰伦的歌没有多少兴趣,只是图个新鲜,来吧,荡下来很快的喔

 

2.一直很想看得杜妻疯的《黑社会》终于出来了,经过广电总局的妙手,现在成了《龙城岁月》,根本失去了原有的味道,还剪去了10多分钟的戏份,可想而知,这10多分钟是对咱们祖国的青少年存在严重的误导可能,对于咱们的精神文明建设会起到严重的阻碍广电总局英明!不过要看的去bt荡下来吧,趁着现在bt还不是咱们这政权严打的对象…

好了,到此,问题已经基本解决,那么,要让它变好看点,让自己写的东东更加让自己“幸福”,就要设置其他属性了,比如滚动条(scollbar),边框,字体,颜色等等。这些就要稍微了解一点HTML或者CSS了。

  1. <div style="
  2. overflow: auto; width: 400px; height: 180px;
  3. font: 12px Verdana;
  4. color:#000;
  5. background-color:#FFF;
  6. border: 1px dotted #999;
  7. scrollbar-face-color: #CBDDF1;
  8. scrollbar-highlight-color: #547CBB;
  9. scrollbar-shadow-color: #547CBB;
  10. scrollbar-3dlight-color: #ffffff;
  11. scrollbar-arrow-color:  #547CBB;
  12. scrollbar-track-color: #FFFFFF;
  13. scrollbar-darkshadow-color: #FFFFFF;"> 
  14. 1.听周杰伦这孩子最新专辑的主打歌,已经几日了,原来是睡在旁边的室友一天到晚放的就是这歌,嘿嘿,是《<strong>11月的肖邦》!咋10月就出来了?</strong><em>香港有人bt被法院判了!美国下令关闭电驴服务</em><strong>Cao!</strong>
  15. 我对于周杰伦的歌没有多少兴趣,只是图个新鲜,来吧,<strong>荡下来很快的喔</strong>
  16.  
  17. 2.一直很想看得<strong>杜妻疯的《黑社会》</strong>终于出来了,经过<strong>广电总局的妙手</strong>,现在成了<strong>《龙城岁月》,</strong>根本失去了原有的味道,还剪去了<strong>10多分钟的戏份</strong>,可想而知,这10多分钟是<em>对咱们祖国的青少年存在严重的误导可能,对于咱们的精神文明建设会起到严重的阻碍</em><strong>广电总局英明!</strong>不过要看的去bt荡下来吧,<strong>趁着现在bt还不是咱们这政权严打的对象...</strong> 
  18. </div>

效果:

1.听周杰伦这孩子最新专辑的主打歌,已经几日了,原来是睡在旁边的室友一天到晚放的就是这歌,嘿嘿,是《11月的肖邦》!咋10月就出来了?香港有人bt被法院判了!美国下令关闭电驴服务Cao!
我对于周杰伦的歌没有多少兴趣,只是图个新鲜,来吧,荡下来很快的喔

 

2.一直很想看得杜妻疯的《黑社会》终于出来了,经过广电总局的妙手,现在成了《龙城岁月》,根本失去了原有的味道,还剪去了10多分钟的戏份,可想而知,这10多分钟是对咱们祖国的青少年存在严重的误导可能,对于咱们的精神文明建设会起到严重的阻碍广电总局英明!不过要看的去bt荡下来吧,趁着现在bt还不是咱们这政权严打的对象…

posted @ 2008-01-06 22:24 胡枫 阅读(369) 评论(0) 编辑

        现在浏览器多了,做web页面还是比较痛苦的,当然,如果你不在乎自己做的页面在有些浏览器上面惨不忍睹那也是种不错的心态(至少少了点头痛的机会),可是你老板或者上司或者你的用户同意吗?-__!

        下面我就介绍我知道的hack方法吧。我现在比较常用的,并且感觉用的不动脑子的方法是:

  1. #yourId/.yourClass {/*normal*/}
  2. * html #yourId/.yourClass {/*IE6 and below*/}
  3. *+html #yourId/.yourClass {/*IE7 only*/}
  4. @media all and (min-width:0px){
  5.     #yourId/.yourClass { /*opera*/ }
  6. }

用法:直接写CSS,用firefox作为第一浏览器看效果,然后IE6下不一样,就用* HTML重写那个ID容器或者类;如果IE 7不一样,就用*+HTML重写,如果opera下面不一样,就用@media那个,当然这写重写的需要放在原来的后面。呵呵,就这么简单。这个方法用了之后可能会上瘾,可是会有诸如增加CSS文件容量等不爽,甚至有时候还会出现直接用这个写几段不同的。所以还是建议能熟悉了解个浏览器具体是在什么属性上支持不一样(例如border宽度IE6认为是不能算在width里面的,但是firefox是认为算width一起的),先尽力写几个浏览器通用的CSS,不到必不得已不用这个hack方法。

原理:firefox认为是CSS语法错误,所以忽略。但是不同IE版本识别不同,不忽略,所以能实现hack,并且*+HTML还能通过W3C验证,呵呵,爽吧。opera那个就不多说了,也是类似原理,但是看起来比较崩溃,要说明的是,firefox下没问题的话,opera基本也没什么问题的,所以不太会用到这个hack。

还需要其他浏览器hack方法?抱歉,我就知道这么多,因为我电脑上只有这么几个浏览器,呵呵,公司要求或者我自己想要把握的用户群够了。

        ————————————-

另外就是!important这个方法了(firefox遇到这个优先级就最高,但是IE6不认,所以下面重新定义可以覆盖),不过这个貌似是以前甚至现在都很多人在用的,但是我个人感觉不是很爽,不能像上面的那样明确的搞定某个浏览器。比如现在IE7对规范CSS支持已经比IE6好了不知道多少,但是还是会有和firefox有的差异,所以用important的方式,控制起来并不像上面的那么一目了然。

各种浏览器CSS hack方法
posted @ 2008-01-06 22:06 胡枫 阅读(95) 评论(0) 编辑
posted @ 2008-01-06 22:03 胡枫 阅读(126) 评论(0) 编辑