【问题标题】:Action PostBackUrl Programmatically using C#使用 C# 以编程方式操作 PostBackUrl
【发布时间】:2011-09-26 00:02:00
【问题描述】:

你能在页面后面的代码中得到 PostBackUrl 的动作吗?

我想调用一个 onclick 函数,该函数执行一些数据库更新,然后将值作为隐藏字段回发到不同的 URL。

【问题讨论】:

    标签: c# asp.net postbackurl


    【解决方案1】:

    我会使用 server.Transfer 但是,隐藏字段是非常不安全的。所以在它的位置(并且因为您已经在使用 server.transfer)为什么不使用 Context.Items?您可以通过它传输整个对象。例如: 这是在原始页面上 -

    Context.Items.Add("Contact", contactID)
            Server.Transfer("~/ViewContact.aspx")
    

    在你做的结果页面上 -

    Dim contactID = Context.Items.Item("Contact").ToString()
    

    使用 server.transfer 时必须非常小心,因为传输发生在服务器中,并且永远不会通知浏览器该页面与其请求的页面不同。如果您没有预料到,这可能会在您尝试回发时给您带来麻烦。

    实际上我刚刚写了一篇关于这件事的博客……

    Server.Transfer example

    【讨论】:

    • 这是个好主意,但 URL 还是一样的 (?) - 我真的很想看到它“继续”到下一页。
    • 阅读您的原始文本,您真的不想进行回发,您只是发布到新页面。所以本质上,用户填写表格,你执行数据库的东西......然后(使用该数据)你发布到一个新页面。如果您不在乎,我会使用自 3.5 SP1 以来可用的路由功能。即使它是安全的,您也可以随时加密数据。小心使用 ViewState,它已被黑客入侵。
    • 如果您只是发布到新页面.. 只需使用 Response.Redirect 然后使用页面历史记录。然后,您可以从前一页获取字段的句柄。
    【解决方案2】:

    您创建一个简单的白页,其中包含您想回发的所有输入,在表单内,并使用您回发的 javascript。

    问题是当用户没有启用 javascript 时,在这种情况下,在这个白色的简单页面中,您包含一条消息,告诉用户此页面会在几秒钟内自动重定向到另一个页面,或单击此处现在重定向。

    这个简单的白页,只是点击后对普通页面的覆盖。

    您也可以阅读这篇与post form data to another URL 类似的技巧的帖子,其中包含源代码和示例。

    还有很多其他方法可以pass values between asp.net web pages

    当您有一个支付网关提供商时,通常会出现这种情况,并且您从您的页面中获胜以转移到该网关 - 例如贝宝。另一种解决方案是,有一个页面,其中包含您想要发送到下一页的摘要,并且在该页面中您包含所有数据、摘要和返回网关的正常帖子。

    我需要运行一个函数(在代码中 后面)单击按钮时。一次 该功能已完成,然后我想要 后面的代码发布到不同的 具有隐藏字段值的页面

    当您的功能完成后,您无法将帖子移回另一页。您可以做的是向您的页面呈现一个简单的表单,其中您的数据作为您需要发送到其他页面的隐藏输入,并自动发布您已呈现的这个新表单。

    示例

    protected void Button1_Click(object sender, EventArgs e)
    {
       // ...you calculations here...
    
        StringBuilder sbRenderOnMe = new StringBuilder();
    
        // the form and the data
        sbRenderOnMe.AppendFormat(
        "<html><body><form action=\"http://www.google.com\" method=\"post\" name=\"form1\">"
             + "<input value=\"{0}\" id=\"lst-Send1\" name=\"Send1\" type=\"hidden\" />"
             + "<input type=\"submit\" name=\"Button1\" value=\"press me if not automatically redirect\" id=\"Button1\" />"
         + "</form>"
         , 1100
        );
    
        // the auto submit
        sbRenderOnMe.AppendFormat("<script>document.form1.submit();</script>");       
        sbRenderOnMe.AppendFormat("</body></html>");
    
        Response.Write(sbRenderOnMe.ToString());
        Response.End();
    }
    

    唯一一个有小闪烁并且没有javascript就不能自动工作的减号,需要告诉用户按下按钮。

    【讨论】:

    • 谢谢你,但也许我没有说清楚。无论 Javascript 是什么,我都需要在单击按钮时运行一个函数(在后面的代码中)。一旦该功能完成,我希望后面的代码发布到具有隐藏字段值的不同页面。 (如 PostBackUrl)
    • 基本上,我正在尝试提交购物车内容,但在页面移动到订单页面之前运行我的重新计算购物车功能。我对 C# 比较陌生,老实说,我不理解提供的示例。
    • @ComfortablyNumb 正是我在这里向您展示的内容。再读一遍以了解我建议(和使用)的方式
    • @ComfortablyNumb 我做了一些代码示例,你看到了吗?我已经对其进行了测试和工作,得到了谷歌错误页面:)
    【解决方案3】:

    完成原始代码隐藏事件后,您可以使用Server.Transfer 并保留表单和查询字符串变量。

    Server.Transfer("OtherPage.aspx", true);
    

    【讨论】:

    • Server.Transfer 不会发送@ComfortablyNumb 要求的新回发值。要求具有新帖子数据的不同网址。这两个都失败了 Server.Transfer
    • Request.Form 集合将在您使用“Server.Transfer”时保留原始帖子中的值。您可以通过设置一个简单的测试项目来检查这一点。
    • 有原帖,但这里需要发不同帖!
    【解决方案4】:

    我遇到过这个解决方案

    <asp:LinkButton ID="CartOrderButton" runat="server" PostBackUrl="order.aspx" onclick="CartOrderButton_Click">Order Me</asp:LinkButton>
    

    【讨论】:

      猜你喜欢
      • 2019-04-20
      • 1970-01-01
      • 2013-02-09
      • 1970-01-01
      • 2018-04-23
      • 1970-01-01
      • 1970-01-01
      • 2010-09-17
      • 2017-12-14
      相关资源
      最近更新 更多