ASP.Net在PostBack上保存状态

时间:2012-03-12 23:57:37

标签: asp.net postback

我需要在回发中保存一些文本,但由于对服务器阵列的非粘性负载平衡,我不能将其存储在服务器会话中。

在回发结束时我有

Response.Redirect(Request.RawUrl);

由于这是一个重定向,我无法在所有浏览器上可靠地设置cookie,因此它已经出局(并且4096字符限制也可能是一个问题)

我能想到的唯一选择是使用查询参数,但保存的数据可能超过2048个字符。

除了将结果存储在数据库中之外,还有解决方法吗?

3 个答案:

答案 0 :(得分:1)

使用Server.Transfer,您可以设置源页面的一些公共属性:

public string SomeTextINeed { get; set; }

然后,一旦设置了文本,就可以调用

Server.Transfer("myexcitingUrl");

在目标page_Load方法上检查文字:

SourceWebForm1 webform = Context.Handler as (SourceWebForm1);
string someTextINeed = webform.SomeTextINeed;

答案 1 :(得分:0)

Viewstate可能有用。保存/检索如下值:

ViewState["MyNumericValue"] = myNumericValue;
//at next postback
myNumericValue = (int)ViewState["MyNumericValue"];

视图状态存储在页面上的html隐藏字段中,因此要保留确保HTTP POST而不是GET所需的值(如果需要说出Response.Redirect,这将是一个问题。来自javascript的表单如下:

document.forms["myform"].submit();

如果这不起作用,取决于页面的大小以及您愿意对加载速度产生的影响,您可以在javascript而不是response.redirect中触发重定向。这意味着您先设置cookie然后重定向。如果该值太大而无法存储在cookie中,我会说这是不可能的,您需要将其存储在数据库中。

答案 2 :(得分:0)

这里唯一合适的解决方案是使用ASP.NET会话状态功能,实际上就是它的构建目的。

对于非数据库要求,您只需使用共享的内存缓存而不是数据库来存储会话状态,有一些可供选择的已经适用于ASP.NET会话:

是的,有一个学习曲线,但是在你设置之后你就不会后悔,这给了你很多自由,特别是在处理负载均衡器和非粘性会话时,它确实存在值得。