2010-09-29 105 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的解决方案非常灵活,但似乎很慢