2010-09-29 106 views
0

我正在重寫URL Urlrewriting.net,並且遇到了似乎是一個常見問題,但我似乎可以解決它。我將介紹一個簡化的案例。Urlrewriting.net IsPostBack總是虛假

URL重寫與規則可以正常使用:

<urlrewritingnet rewriteOnlyVirtualUrls="true" defaultPage="default.aspx" defaultProvider="RegEx" xmlns="http://www.urlrewriting.net/schemas/config/2006/07"> 
    <rewrites> 
     <add name="catalog" virtualUrl="^~/catalog/(.*)/(.*).aspx" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/catalog.aspx?cid=$1&amp;c=$2" ignoreCase="true"/> 
    </rewrites> 
</urlrewritingnet> 

在網頁上我有2 ASP DataList控件:按鈕內。點擊後,頁面刷新但不做任何事情。

我跟着ScottGu's article暗示表單控件適配器重寫表單的操作以匹配重寫的URL。

頁面URL在瀏覽器:http://...../dev/catalog/13/Music.aspx

<form name="aspnetForm" method="post" action="/dev/catalog/13/Music.aspx" id="aspnetForm"> 

現在我看到的表單操作正確的URL,並在調試的時候,我可以看到的頁面加載事件觸發。

現在的問題是,每次頁面加載Page.IsPostback爲false時,都會導致頁面重新綁定DataList,因此忽略按鈕應該觸發的ItemCommand。

if (!Page.IsPostBack) 
    PopulateControls(); 

我使用.NET 3.5 SP1,有一個ScriptManager母版頁上,但此頁面上沒有的UpdatePanel。我也嘗試重置Form.Action屬性並繞過ScottGu的解決方案,獲得相同的結果。如果我直接轉到頁面URL而不使用重寫器,那麼一切正常。

我錯過了什麼?

+0

有什麼建議嗎?我仍然卡住。謝謝! – Sammy 2010-09-30 15:43:27

回答

0

堅持不懈。原來,問題是母版頁上下面的代碼:

<asp:LinkButton runat="server" PostBackUrl="~/basket.aspx" Text="View Cart" CausesValidation="false" /> 

我更換了一個標準的<a>標籤,一切是偉大的工作。

沒有想法爲什麼這會在這裏有所作爲。我想當重寫URL時,任何PostBackUrl或NavigateUrls都會打破回發。

2

這是LinkBut​​ton的問題,所有的linkbutton都應該從頁面中刪除,包括master頁面。

0

薩米是對的。 我花了5個小時找到問題。

我看了很多關於「ASP.NET網址重寫和回發問題」的文章,直到找到問題。你並不需要像解決方案: http://weblogs.asp.net/jezell/archive/2004/03/15/90045.aspx ,他們是不是也工作...

的解決方案是: 您可以用asp:LinkBut​​ton的,ASP:按鈕,ASP:ImageButton的,但是沒有設置自己的一項PostBackUrl。 只需使用<a>標記而不是linkbutton。

0

這使我困擾了4個小時。

我用的答案實際上是刪除所有的postbackurl和navigateurl的。

其他一切都失敗了,但是它的功能就像一個魅力。真的很瘋狂這是怎麼回事,但事實如此。

0

我遇到了同樣的問題 - UrlRewriter和按鈕的回發值始終爲false。 (沒有指定PostBackUrl的LinkBut​​tons)

我添加了ScottGu的FormControlAdapter,它爲我工作 - 但是 - 一段時間後,我發現我的加載時間真的很痛苦。我最終將它追蹤到FormControlAdapter中的事件中,該事件有時需要5秒鐘才能完成。

如果我從我的.browser文件中刪除FormControlAdapter,主頁按鈕將不再正確回發(始終爲false)。

在我的主頁形式的標籤是越來越具有空動作渲染屬性 <form action="" >

在我的情況,有問題的按鈕是我的母版頁上。通過在我的母版頁的Page_Load事件(在我的情況下爲「default.aspx」)手動設置窗體的動作,我能夠正確地移除FormControlAdapter和按鈕的帖子。

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Request.RawUrl == "/" || Request.RawUrl == "/default.aspx") 
     form1.Action = "default.aspx"; 
    else 
     form1.Action = Request.RawUrl; 

所以看來,所有真正需要的是設置窗體Action。 ScottGu的解決方案非常靈活,但似乎很慢