日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

URL重写后,在有页面回发时的处理

發布時間:2024/10/8 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 URL重写后,在有页面回发时的处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在重寫后的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)以上的是繼承個form,第二種方法就是繼承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

(3)通過客戶端代碼清除form的action。

對于ASPX頁面,我們在客戶端查看代碼時會發現,它自動為form加入了action,并且地址就是開頭所說的原始頁面地址。而對于ASPX頁面,若當它的action為空時也就將回發到當前地址。這樣我們就可以通過在客戶端清除action的方法,來實現回發后繼續保持有地址。

在頁面中加入以下代碼即可:
<script type="text/javascript"> try{document.forms[0].action=""}catch(ex){} </script> html輸出是有順序的這個需要寫在form生成后

轉載于:https://www.cnblogs.com/cuihongyu3503319/archive/2009/02/18/1393388.html

總結

以上是生活随笔為你收集整理的URL重写后,在有页面回发时的处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。