URLRewriter.dll用它伪静态以后,虽然URL变了.但是如果有一个服务器端的按钮,点击以后.在显示URL就变会成 ?id=XX 了,,怎么让他回调以后依然URL不变呢??高手帮帮忙啊!
解决方案 »
- 判断指定元素是否在集合中存在的写法?
- 高手进来看看这个问题。“SqlDateTime 溢出。。。”
- 为何 PostedFile.FileName 得不到客户端 详细路径(vb.net)
- 关于对微软net framework 2.0中925248号bug的修复的疑问!!
- 文件下载为什么总是弹出一个新页面
- 页面闪烁问题
- 怎么样才可以让它只能只读!!
- DropDownList选中问题
- 请问Controls[0]起什么作用呢?
- 急待!怎么button里面没有添加背景图片的属性呢?如何解决(不能选用imageButton)
- 请大牛帮我看看,我这样自己做一个缓存服务器前端是否合理?应该怎么样修改?
- 如何接受存储过程的返回给过程的值?
...
晕.你好好看看我的问题.我问的是怎么让他回调以后依然URL不变呢?? 我现在已经是 test_5.html 这样了,但是页面一回调URL又变回 test.aspx?id=5
了怎么让他回调以后依然URL不变呢??
当触发a.aspx的postback事件时,例如点击按钮后,地址又变回为a.aspx?id=1
解决方法如下:
在a.aspx页面进行如下注册:
<%@ Register TagPrefix="url" Namespace="Intelligencia.UrlRewriter" Assembly="Intelligencia.UrlRewriter" %>
然后,把<asp:form runat="server">替换为<url:form runat="server>
这个方法是在google的urlrewriter group中找到的。
参见:http://groups.google.com/group/UrlRewriter/browse_thread/thread/9eb59d8534ed0ec3/839990b919648ed9?lnk=gst&q=postback&rnum=2#839990b919648ed9
http://www.cnblogs.com/yurichou/archive/2007/01/09/616001.html 【转自www.bitsCN.com】
第一:是在按钮点击事件里处理完后做一下页面跳转,跳转到你重写后的地址***.html
第二:按钮事件采用ajax方式处理
在重写后的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这样就解决回发问题。