利用URLRewriter.dll 转为静态重写后的地址
http://localhost:3628/IThome/web/lookinfo/5029.html重写前的地址
http://localhost:3628/IThome/web/lookinfo.aspx?id=5029
现在能实现把页面改成伪静态了,但是在改成后的页面点击登录按钮的时候页面会突然刷新下把地址又变回了原先没重写的样子了http://localhost:3628/IThome/web/lookinfo.aspx?id=5029这是怎么回事?希望高手指点下.本人QQ806778705 回答的最好能详细点回答..刚刚接触这玩意不久哦
http://localhost:3628/IThome/web/lookinfo/5029.html重写前的地址
http://localhost:3628/IThome/web/lookinfo.aspx?id=5029
现在能实现把页面改成伪静态了,但是在改成后的页面点击登录按钮的时候页面会突然刷新下把地址又变回了原先没重写的样子了http://localhost:3628/IThome/web/lookinfo.aspx?id=5029这是怎么回事?希望高手指点下.本人QQ806778705 回答的最好能详细点回答..刚刚接触这玩意不久哦
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/IThome/web/lookinfo/(.[\d]*).html</LookFor>
<SendTo>~/IThome/web/lookinfo.aspx?id=$1</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
处理回发
在重写后的url里如果产生回发,例如有一个按钮,又调用了该被重写的aspx,用户浏览器中将会显示该aspx文件实际的地址,也就是http: //hostname/default.aspx?id=11。但从用户的角度考虑,如 果单击按钮时突然看到 URL 更改会使他们感到不安。因此必须解决这个问题。
{
public FormRewriterControlAdapter()
{
//
//TODO: 在此处添加构造函数逻辑
//
} protected override void Render(HtmlTextWriter writer)
{
base.Render(new RewriteFormHtmlTextWriter(writer));
}
}public class RewriteFormHtmlTextWriter:HtmlTextWriter
{
/// <summary>
/// 调用基类的构造方法
/// </summary>
/// <param name="writer"></param>
public RewriteFormHtmlTextWriter(HtmlTextWriter writer):base(writer)
{
this.InnerWriter = writer.InnerWriter;
} public RewriteFormHtmlTextWriter(System.IO.TextWriter writer):base(writer)
{
base.InnerWriter = writer;
} public override void WriteAttribute(string name, string value, bool fEncode)
{
if (name == "action")
{
HttpContext context = HttpContext.Current; if (context.Items["ActionAlreadyWritten"] == null)
{
value = context.Request.RawUrl; context.Items["ActionAlreadyWritten"] = true;
}
}
base.WriteAttribute(name, value, fEncode);
}
}
<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.HtmlControls.HtmlForm"
adapterType="FormRewriterControlAdapter" />
</controlAdapters>
</browser>
{
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);
}
}<%@ Register TagPrefix="skm" Namespace="ActionlessForm" Assembly="ActionlessForm" %>
<form runat="server"></form>
//替换为:
<skm:Form id="Form1" method="post" runat="server"></skm:Form>