Van*_*nel 6 c# asp.net user-controls
我的ViewState有问题.我有一个aspx页面左侧有一个树视图,右侧有一个带有ASP.NET面板的UpdatePanel.它位于内部面板中,我可以动态加载和卸载用户控件.我使用该更新面板加载动态控件.
我还为我的用户控件创建了一个自定义控件,因为我需要从页面传递一些值.在该构造函数上,我使用ViewState来存储这些值.
我第一次加载用户控件时,我用参数调用它的构造函数.当我在每个回发上重新加载该用户控件时,我使用它的普通构造函数.
我的问题是我在ViewState上存储的值在连续回发时变为null.
更新:
这是我的用户控件:
public class MyUserControl : System.Web.UI.UserControl
{
private int PKId
{
get { return ViewState["pkId"] as int; }
set { ViewState["pkId"] = value; }
}
public MyUserControl(int pkId)
{
this.PKId = pkId;
}
...
}
Run Code Online (Sandbox Code Playgroud)
我正在按照这篇文章动态加载控件:http://msdn.microsoft.com/en-us/magazine/cc748662.aspx#id0070065.
第二次更新:
我在第一次加载用户控件时和每个原型上都设置了相同的控件ID.
也许我可以使用另一种方法来存储这些值,如输入隐藏字段或缓存.我选择了ViewState,因为我不想为每个用户重载带有Session值的服务器.
第三次更新:
I load the controls with this code:
System.Web.UI.UserControl baseControl = LoadControl(ucUrl) as System.Web.UI.UserControl;
if (baseControl != null)
{
baseControl.ID = "DestinationUserControl";
PanelDestination.Controls.Add(baseControl);
}
Run Code Online (Sandbox Code Playgroud)
和reaload这段代码:
DynamicControls.CreateDestination ud = this.LoadControl(TrackedUserControl) as DynamicControls.CreateDestination;
if (ud != null)
{
ud.ID = "DestinationUserControl";
PanelDestination.Controls.Add(ud);
}
Run Code Online (Sandbox Code Playgroud)
发生了什么?
在加载/构造控件后,尝试将控件存储到局部变量中,然后再将其添加到控件层次结构中。这允许 ViewState 数据从控件映射到控件。请参阅此处的“规则 2” http://chiragrdarji.wordpress.com/2009/05/20/maintain-viewstate-for-dynamic-controls-across-the-postback/。
| 归档时间: |
|
| 查看次数: |
15934 次 |
| 最近记录: |