我正在重写URL Urlrewriting.net,并遇到了一个似乎很常见的问题,但我似乎可以解决它。我将介绍一个简化的案例。
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&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都是假的,导致页面重新绑定DataList,从而忽略按钮应该触发的ItemCommand。
if (!Page.IsPostBack)
PopulateControls();我使用的是.NET 3.5 SP1,母版页上有一个ScriptManager,但此页上没有UpdatePanel。我还尝试了重置Form.Action属性,并绕过了ScottGu的解决方案,得到了同样的结果。如果我不使用重写器直接转到页面URL,一切都会正常工作。
我遗漏了什么?
发布于 2010-10-30 20:24:38
这是LinkButton的问题,所有的链接按钮都应该从包含母版页的页面中移除。
发布于 2010-10-01 01:09:35
坚持是有回报的。原来问题出在母版页上的以下代码中:
<asp:LinkButton runat="server" PostBackUrl="~/basket.aspx" Text="View Cart" CausesValidation="false" />我用一个标准的<a>标签替换了它,一切都很好。
不知道为什么这会在这里有所不同。我猜在重写URL时,任何PostBackUrl或NavigateUrls都会破坏回发。
发布于 2011-03-05 13:29:46
萨米是对的。我花了大概5个小时才找到问题。
我读了很多关于"ASP.NET网址重写和回发问题“的文章,直到找到问题所在。你不需要像http://weblogs.asp.net/jezell/archive/2004/03/15/90045.aspx这样的解决方案,而且它们也不能工作...
解决方案是:你可以使用asp:Linkbutton,asp:Button,asp:ImageButton,但不要设置他们的postbackurl。只需使用< a >标签而不是linkbutton。
https://stackoverflow.com/questions/3818158
复制相似问题