如何在asp.net WebForms中实现Post / Redirect / Get模式?

时间:2009-05-28 06:51:55

标签: asp.net post-redirect-get

所以我理解了prg模式的基础知识。但我没有遇到过将任意数据提供给页面“get”实例的技术。

例如,我可能希望根据发起PostBack的操作向用户显示不同的反馈消息。

我一直在做的是发送一个标识符作为查询字符串参数。这工作正常,但它引入了书签问题,似乎不会很好地扩展。如果我需要发送所有ViewState怎么办?

不幸的是,我现在与WebForms联系在一起并且无法说服我的组织迁移到mvc。

2 个答案:

答案 0 :(得分:3)

如果POSTed字段在重定向之前被保留,并且您需要在重定向之后访问该数据,我会在您提到的时候在查询字符串上附加数据记录的标识符。您还可以指定请求的状态(用于显示消息等)。然后在GET页面上,你可以读出数据并用它做任何事情。

我没有看到任何其他解决方法,因为GET获取的每个页面都无法访问上一页的ViewState等。

使用Server.Transfer与在原始页面上处理POST具有相同的效果。

你可以使用Session变量来存储POST数据,但这很糟糕。

答案 1 :(得分:0)

我认为您仍然可以在表单元素中使用get方法。 在这种情况下,您将无法以正常方式使用控件的ID。但是您可以使用Request.Params集合来获取视图状态。

更新:对不起,我刚刚再试一次。并发现您可以通过代码隐藏中的ID访问您的服务器控件。喜欢:

Response.Write(text1.Text)

参见示例:

aspx页面(仅表单元素):

< form id="form1" runat="server" method="get">
< div>
< asp:TextBox ID="text1" runat="server" />
< asp:Button ID="button1" runat="server" OnClick="buttonClick" />
< div>
< form>

注意: 我在每个“&lt;”之前使用了一个空格否则上面的代码将不可见。

页面后面的代码(仅按钮点击事件):

protected void buttonClick(object sender, EventArgs e)
    {
        string text = Request.Params["text1"];

        Response.Write(text);
    }

当您点击按钮时,网址将如下所示:

http://localhost:1157/WebSite1/Default.aspx?__VIEWSTATE=%2FwEPDwUKMTkwNjc4NTIwMWRkoJEtEHZ8lHQ53QllSkz8ncpEw80%3D&__EVENTVALIDATION=%2FwEWAwKf%2BPPUCwKTjKGwCgKs34rGBvus9oxN%2FQkHlkzpKUEwrbxHLM6u&text1=ashish&button1=