所以我理解了prg模式的基础知识。但我没有遇到过将任意数据提供给页面“get”实例的技术。
例如,我可能希望根据发起PostBack的操作向用户显示不同的反馈消息。
我一直在做的是发送一个标识符作为查询字符串参数。这工作正常,但它引入了书签问题,似乎不会很好地扩展。如果我需要发送所有ViewState怎么办?
不幸的是,我现在与WebForms联系在一起并且无法说服我的组织迁移到mvc。
答案 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);
}
当您点击按钮时,网址将如下所示: