Dmi*_*iyd 5 c# asp.net exception
我明白了:
System.Runtime.Serialization.SerializationException
在Assembly'System.Web中键入'System.Web.UI.WebControls.Button',Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'未标记为可序列化.描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.
异常详细信息:System.Runtime.Serialization.SerializationException:在Assembly'System.Web中键入'System.Web.UI.WebControls.Button',Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'未标记为可序列化.
当我尝试将List保存到viewState并在Page_PreInit事件中恢复它时,我得到它
我设置按钮并将它们添加到我稍后保存到viewState的列表中:
ViewState["Buttons"] = buttons;
Run Code Online (Sandbox Code Playgroud)
然后我想检索它们并将它们附加回它们的事件处理程序:
void Page_PreInit(object sender, EventArgs e)
{
List<Button> btn = (List<Button>)ViewState["Buttons"];
if (btn!=null)
{
foreach (var item in btn)
{
item.Width = 20;
item.Command += obtainTopicsPerPage_Click;
item.CommandName = tPage.ToString();
item.Text = tPage.ToString();
}
}
}
Run Code Online (Sandbox Code Playgroud)
根据异常消息,System.Web.UI.WebControls.Button不可序列化.(这并不奇怪.)为了将某些内容保存到ViewState,它必须是可序列化的,以便可以将完整的"self"写入字符串并存储在hiddenViewState页面上的表单值中.
为什么要尝试Button在ViewState中存储s?ViewState对于存储小值和其他隐藏形式字段的东西非常有用.但整个UI控件?你想用它做什么?
如果您只需要Button根据ViewState中的某些数据动态创建控件,那么您应该只存储最少量的数据以使其成为可能,并Button在该数据的代码中创建s.像这样的东西:
List<string> btn = (List<string>)ViewState["ButtonStrings"];
foreach (var str in btn)
{
var item = new Button();
item.Width = 20;
item.Command += obtainTopicsPerPage_Click;
item.CommandName = tPage.ToString();
item.Text = tPage.ToString();
// some use of the str from the ViewState
// or if all you need is a count, just store an int in ViewState and use a for loop
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9530 次 |
| 最近记录: |