[英]An alternative approach to URL Rewriting and Postbacks with Global.asax?
我一直遇到網址重寫和回發問題。
編輯:當前使用IIS 7和URL重寫模塊。
基本上在回發之后,我的URL重寫完全混亂,並在我的查詢字符串中添加了一些重復和不必要的字段值對。 考慮到我在我的代碼中解析了URL,在引發Postback后,這打破了已經工作的頁面。
從我看到我之前的許多人都有同樣的問題,幾乎所有人都通過修改PageLoad上的表單操作修復了它,如下所示:
protected void Page_Load(object sender, EventArgs e)
{
form1.Action = Request.RawUrl;
//Some other interesting things.
}
重要提示:這樣做很有效 ,但它確實有效。
然而,雖然我的開發經驗實際上還不到一個月,但到目前為止,我一直在努力為我的問題尋找更優雅的解決方案。 我一直暗示可能有一個更好的選擇,包括編輯Global.asax ,以便在更“全局”的水平上獲得相同的結果。
在我看來,這應該使整體效率更高,因為在調用任何其他頁面之前將完成該技巧。
所以我的實際問題是:
如何通過編輯Global.asax文件而不是修改我的MasterPage加載事件上的表單操作來實現相同的目的? 如果你有一個更優雅的解決方案,我將不勝感激你也包括它。
考慮到這是我的第一個問題,我希望我已經足夠建設性了。
如果你無法改變重寫方法,那么我可以想到兩種可能比你擁有的方法更好的方法。
1)創建一個基頁並重寫其中的操作 - 然后所有頁面都應該從新的基頁繼承。 這使代碼保持在一個位置,您不必在每個頁面中寫入。
2)從默認表單控件繼承並停止它完全呈現action屬性,然后它將回發到重寫的URL。 然后用新控件替換所有表單實例。 您可以在本文的中間部分看到我的意思http://msdn.microsoft.com/library/ms972974
編輯
3)Scott Gu發布了這個問題的解決方案(在這篇文章http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx )這更干凈,不涉及使用控制適配器更改任何代碼。
通過iis還有一種方法:
我建議你計算root(在master頁面屬性中,如果存在master),如下所示:
Root = "http://" + Request.Url.Host + Request.ApplicationPath;
Root += (Root.EndsWith("/") ? "" : "/");
然后使用此指令將其粘貼到.aspx中:
<%=Root %>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.