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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2024/10/8 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 URL重写后,在有页面回发时的处理 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在重寫(xiě)后的url里如果產(chǎn)生回發(fā),例如有一個(gè)按鈕,又調(diào)用了該被重寫(xiě)的aspx,用戶(hù)瀏覽器中將會(huì)顯示該aspx文件實(shí)際的地址,也就是http:?//hostname/default.aspx?id=11。但從用戶(hù)的角度考慮,如?果單擊按鈕時(shí)突然看到?URL?更改會(huì)使他們感到不安。因此必須解決這個(gè)問(wèn)題。
解決方法有二:
(1)自己定義一個(gè)Actionlessform類(lèi),在aspx中不再使用系統(tǒng)提供的form?標(biāo)記
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); } } }
創(chuàng)建此類(lèi)并對(duì)其進(jìn)行編譯之后,要在?ASP.NET?Web?應(yīng)用程序中使用它,應(yīng)首先將其添加到?Web?應(yīng)用程序的?References?文件夾中。然后,要?使用它來(lái)代替?HtmlForm?類(lèi),做法是在?ASP.NET?網(wǎng)頁(yè)的頂部添加以下內(nèi)容:
<%@ Register TagPrefix="skm" Namespace="ActionlessForm" Assembly="ActionlessForm" %>
然后,將
<form runat="server">
(如果有)替換為:
<skm:Form id="Form1" method="post" runat="server">
并將右邊的?</form>?標(biāo)記替換為:
</skm:Form>
(2)以上的是繼承個(gè)form,第二種方法就是繼承page,這樣你不需要在aspx頁(yè)中改任何東西。
代碼:
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); } } }
把這個(gè)文件編譯成dll,并在你的項(xiàng)目中引用它。

然后把項(xiàng)目中的所有aspx文件對(duì)應(yīng)的cs文件中的繼承page類(lèi)的代碼改寫(xiě)為繼承OLPage。
例如
public?class?WebForm1:page
改寫(xiě)為
public?class?WebForm1:URL.OLPage

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

對(duì)于ASPX頁(yè)面,我們?cè)诳蛻?hù)端查看代碼時(shí)會(huì)發(fā)現(xiàn),它自動(dòng)為form加入了action,并且地址就是開(kāi)頭所說(shuō)的原始頁(yè)面地址。而對(duì)于ASPX頁(yè)面,若當(dāng)它的action為空時(shí)也就將回發(fā)到當(dāng)前地址。這樣我們就可以通過(guò)在客戶(hù)端清除action的方法,來(lái)實(shí)現(xiàn)回發(fā)后繼續(xù)保持有地址。

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

轉(zhuǎn)載于:https://www.cnblogs.com/cuihongyu3503319/archive/2009/02/18/1393388.html

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。