zoukankan      html  css  js  c++  java
  • Asp.net Url改写方法——回发处理方法

    处理回发

    系列文章目录

    一、伪静态方式(使用URLRewriter)
         1、改写方法    (文章地址:http://www.cnblogs.com/scottckt/archive/2011/01/12/1933737.html)
         2、回发时处理方法(文章地址:http://www.cnblogs.com/scottckt/archive/2011/01/12/1933791.html)
         3、将Aspx改写成HTml方法(文章地址:http://www.cnblogs.com/scottckt/archive/2011/01/12/1933836.html)

    二、真实改写(使用System.Web.Routing)(文章地址:http://www.cnblogs.com/scottckt/archive/2011/01/12/1933893.html)


     

        在重写后的url里如果产生回发,页面就会显示实际地址。如http://hostname/2003/Default地址就会显示成http://hostname/ShowBlogContent.aspx?year=2003。
        解决方法一——使用微软提供的ActionlessForm.dll

        1、引用ActionlessForm.dll

        在UrlRewriter方案中有ActionlessForm项目,编译后生成ActionlessForm.dll。在改写URL的项目中引用ActionlessForm.dll。
        2、使用ActionlessForm替换Form
        先在 ASP.NET 网页的顶部添加以下内容:<%@ Register TagPrefix="skm" Namespace="ActionlessForm" Assembly="ActionlessForm" %>

        然后,将 <form runat="server">(如果有)替换为: <skm:Form id="Form1" method="post" runat="server">,并将底部的 </form> 标记替换为: </skm:Form>

    例如微软件提供测试项目RewriterTester中的ListProductsByCategory.aspx页面,此页面主要是为了处理分页功能。请看下边源码:

    <%@ Register TagPrefix="skm" Namespace="ActionlessForm" Assembly="ActionlessForm" %>
     
    <%@ Page Trace="True" Language="c#" CodeBehind="ListProductsByCategory.aspx.cs" AutoEventWireup="false"
        Inherits
    ="RewriterTester.ListProductsByCategory" %>
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
        
    <title>Display Products</title>
        
    <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1" />
        
    <meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1" />
        
    <meta name="vs_defaultClientScript" content="JavaScript" />
        
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5" />
    </head>
    <body>
        
    <skm:Form ID="Form1" onsubmit="alert('foo');" action="test" runat="server">
            
    <asp:Label ID="lblCategoryName" Font-Bold="True" Font-Size="18pt" runat="server"></asp:Label>
            
    <asp:DataGrid ID="dgProducts" runat="server" AutoGenerateColumns="False" Width="369px"
                Height
    ="200px" BorderColor="White" BorderStyle="Ridge" CellSpacing="1" BorderWidth="2px"
                BackColor
    ="White" CellPadding="3" GridLines="None" AllowSorting="True">
                
    <SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#9471DE"></SelectedItemStyle>
                
    <ItemStyle ForeColor="Black" BackColor="#DEDFDE"></ItemStyle>
                
    <HeaderStyle Font-Bold="True" ForeColor="#E7E7FF" BackColor="#4A3C8C"></HeaderStyle>
                
    <FooterStyle ForeColor="Black" BackColor="#C6C3C6"></FooterStyle>
                
    <Columns>
                    
    <asp:BoundColumn DataField="ProductName" HeaderText="Product Name" SortExpression="ProductName">
                    
    </asp:BoundColumn>
                    
    <asp:BoundColumn DataField="UnitPrice" HeaderText="Price" DataFormatString="{0:c}"
                        SortExpression
    ="UnitPrice DESC">
                        
    <ItemStyle HorizontalAlign="Right"></ItemStyle>
                    
    </asp:BoundColumn>
                
    </Columns>
                
    <PagerStyle HorizontalAlign="Right" ForeColor="Black" BackColor="#C6C3C6"></PagerStyle>
            
    </asp:DataGrid>
        
    </skm:Form>
    </body>
    </html>


        解决方法二——自己编写方法(来源于网络,本人没有作测试)

        此方法是继承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


     参考文章:http://www.cnblogs.com/rickel/archive/2007/02/04/639616.html

  • 相关阅读:
    欧拉回路 定理
    UESTC 1087 【二分查找】
    POJ 3159 【朴素的差分约束】
    ZOJ 1232 【灵活运用FLOYD】 【图DP】
    POJ 3013 【需要一点点思维...】【乘法分配率】
    POJ 2502 【思维是朴素的最短路 卡输入和建图】
    POJ 2240 【这题貌似可以直接FLOYD 屌丝用SPFA通过枚举找正权值环 顺便学了下map】
    POJ 1860【求解是否存在权值为正的环 屌丝做的第一道权值需要计算的题 想喊一声SPFA万岁】
    POJ 1797 【一种叫做最大生成树的很有趣的贪心】【也可以用dij的变形思想~】
    js 实现slider封装
  • 原文地址:https://www.cnblogs.com/scottckt/p/1933791.html
Copyright © 2011-2022 走看看