也谈UpdatePanel与UrlRewrite一起work时出现Form Action属性的问题

首先感谢老赵写了一篇文章,http://www.cnblogs.com/JeffreyZhao/archive/2006/12/27/604373.aspx#post

其实出现这个问题,根本不是MS Ajax的失误,完全是我们没有用好URLRewrite这个东西的原因。

老赵的解决方法是重写了一个Form类,把原来的Form的Action给清空了。

能否正常工作我不知道,但是我认为“清空”,“利用默认属性”这样一类的做法是很危险的。~~~

重写Form类的,引用也有点麻烦,我觉的重写一个Page,比较方便。我在www.365rss.cn中的做法如下:

using System;
using System.IO;
using System.Web;
using System.Web.UI;
namespace okpower.Utility
{
    
/// <summary>
    
/// URLRewrite 页面基类
    
/// 作者:Kai.Ma http://kaima.cnblogs.com
    
/// </summary>

    public class URLRewritePage : Page
    
{
        
public URLRewritePage()
        
{
        }


        
protected override void Render(HtmlTextWriter writer)
        
{            
            writer 
= new FormFixerHtmlTextWriter(writer.InnerWriter);
            
base.Render(writer);
        }

    }


    
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)
        
{
            
// 如果当前输出的属性为form标记的action属性,则将其值替换为重写后的虚假URL
            if (_url != null && string.Compare(name, "action"true== 0)
            
{
                value 
= _url;
            }


            
base.WriteAttribute(name, value, encode);
        }

    }


}
以后继承这个URLRewritePage就可以了,甚至可以进web.config设置,一劳永逸。
欢迎交流
本博客所有随笔,若未明确标示为转载或未带有原文链接,皆为原创。
本博客所有随笔版权归博客园和kai.ma所有,欢迎转载,转载请保留:
  • 出处:http://kaima.cnblogs.com
  • 作者:kai.ma
posted @ 2006-12-27 12:08 Kai.Ma 阅读(3118) 评论(13) 编辑 收藏

 回复 引用 查看   
#1楼2006-12-27 13:11 | 阿不      
又是一种办法,不管什么办法,都是改变action的值。
 回复 引用 查看   
#2楼2006-12-27 20:28 | Jeffrey Zhao      
:)
 回复 引用 查看   
#3楼2006-12-28 14:23 | 阿不      
@Kai.Ma
你连续PostBack三次试试看.我的第三次PostBack照样出错.

 回复 引用 查看   
#4楼2006-12-28 14:35 | 阿不      
似乎在ansypostback的时候,它并不是用这个方法来写action的值的。我的调试结果是这样的。
 回复 引用 查看   
#5楼2006-12-28 14:38 | 阿不      
OK,no problem ,我原来是直接调用
base.Render(new ActionlessHtmlTextWriter(writer));
不修改writer对象。可它一定要求要修改writer才行。晕

 回复 引用   
#6楼2007-01-04 09:58 | cnlamar[匿名][未注册用户]
不需要三次,这个方法我一直在用,第2次开始就会错误,原因很简单,aspnetajax的form不是页面上见到的那个.
 回复 引用 查看   
#7楼2007-01-05 11:10 | 有容乃大      
原来也是用重写了一个Form类,感觉很不方便。非常感谢楼主。
 回复 引用   
#8楼2007-11-15 20:44 | kerry jiang[未注册用户]
OnLoadComplete 里面把path再Rewrite回来
 回复 引用 查看   
#10楼2008-11-12 09:57 | Jeffrey Zhao      
清空?没有清空啊,是修改为URL。
你这个方法耦合度太高,标准方法是用FormAdaptor

 回复 引用   
#11楼2009-12-09 10:39 | wangjunwei[未注册用户]
出错了 根本没用

 回复 引用 查看   
#13楼2011-07-06 13:45 | oyster.oy      
<form action="#" 试试

在纯粹的urlrewrite 下是可以的,updatepannel 就没试过了

发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 604758 IFJ9RsqfjPc=