gpt4 book ai didi

c# - 如何序列化一个 ViewState 对象

转载 作者:行者123 更新时间:2023-11-30 14:30:08 24 4
gpt4 key购买 nike

我有一些查询数据库并将结果放入 GridView 的函数。它还设置一个包含查询结果的 ViewState 变量。当我回发时,我有一个加载函数,可以从最后的结果中加载 gridview(如果有的话)。

我遇到的问题是我收到一个错误,基本上是说 View 状态对象需要序列化。据我所知,我不确定该怎么做。

Error: Sys.WebForms.PageRequestManagerServerErrorException: Error serializing value 'System.Collections.Generic.List1[<>f__AnonymousType172[System.Int32,System.String]]' of type 'System.Collections.Generic.List1[[<>f__AnonymousType172[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], App_Web_rjb524gi, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]].'

到目前为止我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Runtime.Serialization;

public partial class PlayersManagement : System.Web.UI.Page
{

protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
LoadData();
}
}

public void LoadData()
{

if (ViewState["CurrentGridView"] != null || ViewState["CurrentGridView"] == "")
{
GridViewPlayers.DataSource = ViewState["CurrentGridView"];
GridViewPlayers.DataBind();
}
else
{

DBModel.DBEntities context = new DBModel.DBEntities();

var players= (from f in context.Players
where f.isDeleted == false
select new
{
f.PlayerId,
f.PlayerName

}).ToList();

GridViewPlayers.DataSource = players;
GridViewPlayers.DataBind();
}

ViewState["Sort"] = 0;

}


/**
* This method is for advance search functionality
*
*/
protected void btnSearch_Click(object sender, EventArgs e)
{

// If the search textbox is not empty
if (txtSearch.Text.Trim() != "")
{
// Call to Entity Model Framework
DBModel.DBEntities context = new DBModel.DBEntities();

//Querying the Players table
var search = (from s in context.Players
where s.PlayerName.Contains(txtSearch.Text.Trim())
select new
{
s.PlayerId,
s.PlayerName

}).ToList();


if (search.Count != 0)
{

noResults.Visible = false;

GridViewPlayers.DataSource = search;//Connecting query to the datasource Gridview

ViewState["CurrentGridView"] = search; // <---- Error cause here

GridViewPlayers.DataBind(); //Binding Gridview
}
else
{
noResults.Visible = true;
noResults.Text = "This '" + txtSearch.Text + "' Query Returned No Results";

txtSearch.Text = "";

}


}

}


protected void Gridview_Sort(object sender, GridViewSortEventArgs e)
{

//Label2.Text = e.SortExpression + " " + ConvertSortDirectionToSql(e.SortDirection);
DBModel.DBEntities context = new DBModel.DBEntities();

var players = (from b in context.Players
where b.isDeleted == false
select b);

DataTable gridviewTable = players.CopyToDataTable();

gridviewTable.DefaultView.Sort = e.SortExpression + " " + ConvertSortDirectionToSql(e.SortDirection);

GridViewPlayers.DataSource = gridviewTable;

ViewState["CurrentGridView"] = gridviewTable; <--- Also causes error

GridViewPlayers.DataBind();

}


private string ConvertSortDirectionToSql(SortDirection sortDirection)
{
string newSortDirection = String.Empty;

int sort = (ViewState["Sort"] == null) ? 0 : (int)ViewState["Sort"];
switch (sort)
{
case 0:
newSortDirection = "ASC";
ViewState["Sort"] = 1;
break;

case 1:
newSortDirection = "DESC";
ViewState["Sort"] = 0;
break;
}

return newSortDirection;
}

protected void GridViewPlayers_RowEditing(object sender, GridViewEditEventArgs e)
{
GridViewPlayers.EditIndex = e.NewEditIndex;
LoadData();
}


protected void GridViewPlayers_CancelEditRow(object sender, GridViewCancelEditEventArgs e)
{
GridViewPlayers.EditIndex = -1;
LoadData();
}

最佳答案

如果您真的想将它存储在 View 状态中,那么您可能希望拥有一个可以标记为 [Serializable] 的类型。看起来匿名类型不是。所以不要使用:

var search

使用

 List<Player> search =  Query  

还有类(class)。

[Serializable]
public class Player
{
public int PlayerId {get;set;}
public string PlayerName {get;set;}
}

但是,看起来您每次都在查询数据库,所以即使您确实存储在 View 状态中,您也不会获得任何东西。

关于c# - 如何序列化一个 ViewState 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24191054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com