Urlrewriting.net IsPostBack总是假的

时间:2010-09-29 01:23:24

标签: asp.net webforms url-rewriting postback urlrewriting.net

我正在努力重写网址Urlrewriting.net,并遇到了似乎常见的问题,但我似乎可以修复它。我将提出一个简化的案例。

网址重写与规则完美配合:

<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。

浏览器中的网页网址: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而不使用重写器,一切正常。

我错过了什么?

5 个答案:

答案 0 :(得分:2)

这是LinkBut​​ton问题,所有链接按钮都应从页面中删除,包括母版页。

答案 1 :(得分:0)

持久性得到回报。原来问题是母版页上的以下代码:

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

我用标准<a>代码替换了它,一切都运行良好。

NO IDEA为什么会在这里产生影响。我想当重写URL时,任何PostBackUrl或NavigateUrls都会破坏回发。

答案 2 :(得分:0)

萨米是对的。 我花了5个小时才找到问题。

我读了许多关于“ASP.NET Url重写和回发问题”的文章,直到找到问题为止。您不需要以下解决方案: http://weblogs.asp.net/jezell/archive/2004/03/15/90045.aspx 他们也没有工作......

解决方案是: 你可以使用asp:Linkbutton,asp:Button,asp:ImageButton但是不要设置他们的postbackurl。 只需使用< a >标记而不是linkbutton。

答案 3 :(得分:0)

这让我的思绪一直困扰着我。

我使用的答案实际上是删除所有postbackurl和navigateurl's。

其他一切都失败了,但这就像一个魅力。真的很疯狂这是怎么回事,但确实如此。

答案 4 :(得分:0)

我遇到了同样的问题 - UrlRewriter和按钮的回发值始终为false。 (没有指定PostBackUrl的LinkBut​​tons)

我添加了ScottGu的FormControlAdapter并且它对我有用 - 但是一段时间后我注意到我的加载时间真的很痛苦。我最终追踪到了  FormControlAdapter中的base.Render(new RewriteFormHtmlTextWriter(writer));事件,有时需要5秒才能完成。

如果我从.browser文件中删除了FormControlAdapter,主页按钮将不再正确回发(始终为false)。

在我的主页上,使用空操作属性呈现表单标记 <form action="" >

在我的情况下,有问题的按钮位于我的母版页上。通过在我的MasterPage的Page_Load事件中手动设置表单的操作(在我的情况下为&#34; default.aspx&#34;)我能够删除FormControlAdapter并且按钮正确回发。< / p>

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的解决方案很好而且灵活,但似乎很慢