【问题标题】:Changing Urls on ASP.NET form with Master pages使用母版页更改 ASP.NET 表单上的 URL
【发布时间】:2010-01-13 21:58:44
【问题描述】:

客户要求我们将在其自己的域上运行的网站移动到另一个应用程序的子文件夹中。

我已经使用 ISAPI 重写代理实现了这一点。

但是,有一种表单可以在网站中回帖。为来自 ASP.NET 的操作生成的 url 是 "/sign-up.aspx?"。这会将回发发送到站点的根目录。

我想将其更改为 "sign-up.aspx?"(没有前导斜杠)。如果我不使用母版页,这会很好,因为我可以获得对表单的引用并更改它的操作(这是 .NET 3.5 SP1)。我试图在我的控件中使用以下代码来获取对表单的引用,但它似乎没有做任何事情。它找到了表单,但操作未设置为该值。

        HtmlForm form = ControlLocator.FindControl<HtmlForm>(Page.Master.Master, "form1");
        form.Action = "sign-up.aspx?";

这是在 Page_Load 和 ControlLocator.FindControl 是这个http://www.west-wind.com/Weblog/posts/5127.aspx的端口

有什么想法吗?

干杯, 抢

【问题讨论】:

    标签: .net asp.net proxy url-rewriting isapi-rewrite


    【解决方案1】:

    很好地解决了您的问题。 但是对于想要更改 aspnetform 的操作 URL 的人,请在 Page_Load 事件中使用这个简单的代码(即使他们有母版页)。

    protected void Page_Load(object sender, EventArgs e)
    {
        this.Form.Action = "URL Goes Here";
    }
    

    【讨论】:

      【解决方案2】:

      您是否尝试过在 page_prerender 中这样做?

      可能是所有主内容合并尚未在 page_load 中完成。假设 HtmlForm 是正确的类型,并且表单实际上被称为“form1”——我确信这是正确的。

      【讨论】:

      • 我确实尝试在 page_load 之前在 prerender 中进行此操作,但并不快乐。没有空引用,因此肯定会找到该表单。无论如何感谢您的回答! :) 也许我需要在生命周期的后期进行?
      • 只是检查 - 预渲染应该在 Page_Load 之后发生 - 这是页面被转储之前的最后阶段之一。你是说 Pre_Init 吗?甚至可以在 Render 开始时尝试;尽管 Asp.Net 可能只是忽略了你给它的任何价值。在您尝试设置之前,Form.Action 的值是多少?
      【解决方案3】:

      如果您在注册表单上有一个按钮,您可以使用它的 postBackUrl 属性将回发重定向到不同的 URL。

      <asp:button id="SignUpBtn" 
                  runat="server"
                  postbackurl="sign-up.aspx" 
                  value="Sign Up" />
      

      您可以在"Cross-page Posting in ASP.NET Web Pages" 下找到更多信息。

      【讨论】:

        【解决方案4】:

        最终发现是 umbraco 的 Form.browser 在我更改后重写了回发网址。 (很抱歉在我原来的问题中没有提到使用 umbraco)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-21
          • 2017-09-27
          • 1970-01-01
          • 2013-02-08
          相关资源
          最近更新 更多