gpt4 book ai didi

asp.net - 使用 ASP.NET 进行重定向后获取

转载 作者:行者123 更新时间:2023-12-02 02:55:43 24 4
gpt4 key购买 nike

我如何实现 Post-Redirect-Get ASP.NET 模式?

单击按钮执行一些处理:

<asp:Button id="bbLaunch" OnCommand="bbLaunch_Click" />

用户点击按钮,航天器发射,网页重新显示。如果用户按 F5,他们会收到警告:

enter image description here

问题的解决方法是 Post-Redirect-Get图案。

PRG的方法是什么?可以在 ASP.NET 中实现吗?

问题围绕以下问题展开:
  • 怎么会<asp:Button>执行 POST 到一个不是原始形式的地方?
  • 会怎样 View 状态 当您发布到不读取 View 状态的表单时?
  • 会怎样 View 状态 当您重定向到“真正的”aspx Web 表单时?
  • View 状态 从根本上与 ASP.net Post-Redirect-Get 不兼容?
  • ASP.net 从根本上与 不兼容重定向后--获取 ?
  • 你如何(即什么代码)重定向到“真正的”aspx web 表单?
  • 您如何(即什么网址)重定向到“真实”的 aspx 网页表单?一个关系问题提到 Response.Redirect(Request.RawUrl);
  • 什么时候(即在哪个事件处理程序中)重定向到“真正的”aspx Web 表单?
  • 相关问题提出了如何发布表单数据的问题。这意味着不能使用 HTML 表单 - 所有表单数据都必须添加到查询字符串中。这是真的?如果是这样,为什么?如果没有,为什么不呢? 可以浏览器将表单数据放在查询字符串中?
  • 一个相关的问题提到 Server.Transfer .使用 Server.Transfer是完全错误的,并且绝不会解决 Post-Redirect-Get 问题(因为没有重定向)。正确的?
  • aspx 中必须发生哪些代码更改或 aspx.cs文件支持PRG?想必,最起码得把代码改成post其他地方 MyPage.aspx .

  • 换句话说: 你如何在 ASP.net 中进行重定向后获取?

    备注 : ASP.net (即不是 ASP.net MVC)

    也可以看看
  • How do I implement the Post/Redirect/Get pattern in asp.net WebForms?
  • How do I use the “Post/Redirect/Get” a.k.a. “Redirect after Post” with asp.net
  • 最佳答案

    通常,您可以通过制作一个 aspx Web 表单来执行此操作,该表单使用查询字符串来指示要加载/处理的记录。

    假设您有一个页面可以让您更新一些客户信息:

    http://www.mysite.com/customer.aspx

    您将使用查询字符串中的 id 加载表单:
    http://www.mysite.com/customer.aspx?CustomerId=42

    在代码隐藏中,你会有这样的事情:
    protected void Page_Load(object sender, EventArgs e)
    {
    if (!IsPostBack)
    {
    int customerId = 0;
    if (!string.IsNullOrEmpty(Request.QueryString["CustomerId"]))
    {
    int.TryParse(Request.QueryString["CustomerId"], out customerId );
    }
    if (customerId == 0)
    {
    //handle case when no valid customer id was passed in the qs here
    }
    else
    {
    //load customer details, bind controls etc
    //make sure to handle the case when no customer was found using the id in the qs
    }
    }
    }

    然后在您的页面中的某处,您将有一个保存更改的按钮。该按钮在后面的代码中会有一个 OnClick 处理程序:
    protected void SaveClicked(object sender, EventArgs e)
    {
    //save changes to database here

    //Redirect if all went well
    Response.Redirect("http://www.mysite.com/customer.aspx?CustomerId="
    + idOfSavedCustomer.ToString());
    }

    基本上应该是这样。重定向将导致浏览器对 Redirect(...) 中的 url 发出新的 GET 请求。它将加载页面, if (!IsPostBack)将使用您在上一篇文章中刚刚保存的新值运行并初始化页面。

    对于整个过程,浏览器和服务器之间的流量将如下所示:
    Browser: GET http://www.mysite.com/customer.aspx?CustomerId=42
    Server: 200 (send back some html)

    Browser: POST http://www.mysite.com/customer.aspx?CustomerId=42 (post data sent in request)
    Server: 302 (point to http://www.mysite.com/customer.aspx?CustomerId=42)

    Browser: GET http://www.mysite.com/customer.aspx?CustomerId=42
    Server: 200 (send html)

    在中间步骤中,服务器基本上是在说:

    “你发给我的那个帖子请求,我已经完成了。现在请到这里的另一个页面......”

    url 实际上指向同一页面的事实并不重要。

    针对您的问题要点列表的一些思考:
  • 如何对不属于它的地方执行 POST
    原始形式?

  • 您可以通过设置 action 来做到这一点。属性,或者您可以设置 PostBackUrl在按钮上。
  • 当您张贴到一个没有的表单时,ViewState 会变成什么
    读取 View 状态?

  • 要看。如果您只是将表单发布到不同的页面,则可以使用 <%@ PreviousPageType .../> 指令告诉"new"页面该帖子来自何处。这将使处理新页面上发布的数据变得简单。见 this link for details .
  • 当您重定向到“真实”aspx 时,ViewState 会变成什么
    网页表格?

  • View 状态在 post 请求中发送。重定向时,浏览器将加载一个新页面,并创建自己的 viestate。
  • ViewState 与 ASP.net 根本不兼容
    重定向后获取?

  • 取决于你如何看待它。重定向后,新页面将无法访问之前页面的 View 状态。
  • ASP.net 从根本上与 Post-Redirect--Get 不兼容吗?

  • 否。请参见上面的示例。
  • 你如何(即什么代码)重定向到“真正的”aspx web 表单?

  • 响应.重定向(网址)。这将向浏览器发送一个响应,告诉它执行一个新的 get 请求。
  • 何时(即在哪个事件处理程序中)重定向到“真实”aspx
    网页表格?

  • 当您执行了处理发布请求所需的所有工作时。
  • 相关问题提出了如何发布表单数据的问题。那里
    这意味着不能使用 HTML 表单 - 以及所有表单数据
    必须添加到查询字符串中。这是真的?如果是这样,为什么?如果不,
    为什么不?浏览器可以将表单数据放入查询字符串中吗?

  • 重定向发布请求没有得到很好的支持,应该避免。它可以通过使用 http 响应 307 来完成(使用某些浏览器)。这样做时,服务器有效地告诉浏览器“我不会处理您的发布请求,请将其发布到另一个页面”。
  • 一个相关的问题提到了 Server.Transfer。使用 Server.Transfer 是
    完全错误,并没有解决 Post-Redirect-Get 问题
    (因为没有重定向)。正确的?

  • Server.Transfer(...) 是在服务器端发生的事情。浏览器不知道它。基本上一个页面可以使用 Server.Transfer 以便让其他页面做一些处理,并且该页面将负责将响应发送回浏览器。但是浏览器会认为这是响应的原始页面。
  • aspx 或 aspx.cs 文件中必须发生哪些代码更改以支持
    计划?想必最起码得把代码改成post
    除了 MyPage.aspx 之外的某个地方。

  • 不,可以使用常规回传。诀窍是在页面上有一个(或几个)特定的事件处理程序,它在处理发布的数据后执行 Repsonse.Redirect。

    关于asp.net - 使用 ASP.NET 进行重定向后获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5381162/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com