【问题标题】:Urlrewriting.net IsPostBack always falseUrlrewriting.net IsPostBack 总是假的
【发布时间】:2010-09-29 01:23:23
【问题描述】:

我正在重写 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&amp;c=$2" ignoreCase="true"/>
   </rewrites>
</urlrewritingnet>

在页面上,我有一个 DataList,里面有 2 个 asp:buttons。单击时,页面会刷新但不执行任何操作。

我遵循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,一切正常。

我错过了什么?

【问题讨论】:

  • 有什么建议吗?我还是被困住了。谢谢!

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


【解决方案1】:

是链接按钮的问题,所有链接按钮都应该从页面中删除,包括母版页。

【讨论】:

    【解决方案2】:

    坚持有回报。原来问题出在母版页上的以下代码:

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

    我用标准的&lt;a&gt; 标签替换了它,一切都很好。

    不知道为什么会在这里有所作为。我猜在重写 URL 时,任何 PostBackUrl 或 NavigateUrls 都会破坏回发。

    【讨论】:

      【解决方案3】:

      萨米是对的。 我花了大约 5 个小时才发现问题。

      我阅读了很多关于“ASP.NET Url Re-writing and Postback Problem”的文章,直到找到问题所在。您不需要以下解决方案: http://weblogs.asp.net/jezell/archive/2004/03/15/90045.aspx 而且他们也不工作......

      解决方案是: 您可以使用 asp:Linkbutton、asp:Button、asp:ImageButton 但不要设置他们的 postbackurl。 只需使用&lt; a &gt; 标签而不是链接按钮。

      【讨论】:

        【解决方案4】:

        这连续困扰了我 4 个小时。

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

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

        【讨论】:

          【解决方案5】:

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

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

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

          在我的主页上,表单标签被呈现为一个空的动作属性 &lt;form action="" &gt;

          在我的情况下,有问题的按钮位于我的母版页上。通过在我的 MasterPage 的 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 的解决方案很好且灵活,但似乎真的很慢

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-09-30
            • 2015-03-28
            • 2019-10-11
            • 2020-10-13
            • 1970-01-01
            • 2011-06-20
            • 1970-01-01
            相关资源
            最近更新 更多