如何保存每个用户会话每页的变量
-
10-12-2019 - |
题
我正在使用三个webparts。Webpart A在用户单击Webpart a中的按钮时创建一个值。WebPart B使用此值创建包含用户可以选择的项目的列表。WebPart C使用这两个值来创建用于测试目的的字符串。
WebPart B使用此列表填充下拉框。每当selectedvalue被更改时,它应该更新WebPart C。这是控件的声明。
_documentTypeList = new DropDownList();
_documentTypeList.AutoPostBack = true;
this.Controls.Add(_documentTypeList);
这里的问题是,使用
_documentTypeList.AutoPostBack = true;
重新加载完整页面并将WebPart A中的值重置为null。如何将WebPart B的新值发送到WebPart C而不会丢失WebPart a的值?这一切都发生在1页面上。
解决方案
保存会话状态变量可以使用:
public string Name
{
get
{
return Page.Session["SaveName"] as string;
}
set
{
Page.Session["SaveName"] = value;
}
}
这是一个getter/setter来保存/从会话状态获取
要使用此功能,请执行以下操作:
这从会话状态获取值(需要在onPreRender事件中查看会话状态变量)
txtName.Text = Name;
这将设置为会话状态(可以是要保存到会话状态的任何位置)
Name = txtName.Text;
对于int valuse:
卡恩格 public string Name
到 public int Name
对于bool values等其他任何东西也是如此。
所以对于int来说,它看起来像这样:
public int Name
{
get
{
return Page.Session["SaveName"] as int;
}
set
{
Page.Session["SaveName"] = value;
}
}
正如其他人所指出的那样,要在webpart之间传递数据,您应该使用iInterface方法:
提供(webpart发送数据)使用者(使用该数据的webpart)和作为webparts之间连接的接口:
以上将100%工作,并在回发时保存您的值:)
只是incase你需要这个;)iv在下面的连接上发布了一些链接。
可连接的WebPart问题。.....................?
和
希望有帮助:)
其他提示
您是否尝试过if (!Page.IsPostBack) { your code here }
?
您是否尝试为您的目的创建自定义Web部件连接?经历您的要求可能是最合适的选项
以前的网页部件按以下顺序连接。
WebPart A => WebPart B
WebPart B => WebPart C
WebPart A => WebPart C
.
如果我在WebPart B中更改值时,我会创建一个错误在用户交互上创建的值且未在页面加载上创建值丢失。 WebPart B和WebPart C扣除了没有WebPart A的价值的功能。如果您希望按照上述留下WebPart连接,请查看earyShepointMaster的答案。
因为在我的情况下,WebPart A创建一个唯一的登录令牌,我宁愿不将其保存到页面上。我更愿意将其保留在WebParts上。为此,我更改了它们之间的连接。而是在连接之上,我使用了以下连接。
WebPart A => WebPart B => WebPart C
.
webpart b保存WebPart A的值,并将其与他自己的值一起提供给WebPart C.这是Webparts B接口当前的样子。
public interface IWebPartB
{
string webPartAValue { get; }
string webPartBValue { get; }
}
.