如何在页面回发后保持Asp-Net GridView数据(来自SignalR)
How to persist Asp Net GridView data (coming from SignalR) after page postback?
我在DotNetNuke CMS中创建模块。我不需要编辑我的数据,只需要显示具有排序和分页功能。存在具有DataTable的asp:GridView控件作为数据源。在Page_Load事件中,一些带有数据的行被添加到dataTable和正确显示。排序和分页也可以。在GridView中维护数据(出于排序目的)使用了ViewState。我选择使用ViewState而不是服务器过载,传入数据不必是安全的。对于传入数据我使用SignalR,所以javascript函数从服务器(hub)接收数据。发现我将从javascript web方法(C#)AddNewRowToDataTable调用(DateTime时间、字符串名称、双值…)将参数传递给方法。不幸的是,web方法必须是静态的,这就是ViewState可以不能在其中使用。因此,如果在添加新行时不能使用ViewState,我将丢失所有数据。这没有帮助:
[WebMethod]
public static void AddNewRowToDataTable(DateTime time, string name, double value)
{
Page page = HttpContext.Current.Handler as Page;
if (page != null)
{
if (page.ViewState["dtValues"] != null)
{
// Get the DataTable from ViewState and inserting new data to it.
DataTable dtValues = (DataTable)page.ViewState["dtValues"];
// Add the new row.
dtValues.Rows.Add(new object[] { time, name, value });
// Rebind the GridView control to show inserted data.
BindGridView();
}
}
}
错误无法访问受保护的成员"System.Web.UI.Control.ViewState"通过类型为"System.Web.UI.Page"的限定符;限定符必须是类型为"Christoc.Modules.DNNSignalR.View"(或从中派生)
我宁愿不使用Session来维护数据,因为我不想在服务器端加载太多。
什么是满足我需求的最佳方法:在Asp-Net、DotNetNuke模块中,显示数据来自SignalR,具有排序和分页功能,不会在回发时丢失数据?
您可以为使用内存缓存
对使用以下助手类
public static class CacheHelper<T>
{
public static void AddCacheItem(string rawKey, object value)
{
CacheItemPolicy policy = new CacheItemPolicy();
policy.SlidingExpiration = TimeSpan.FromMinutes(10);
System.Runtime.Caching.MemoryCache.Default.Set(HttpContext.Current.Session.SessionID.ToString() + rawKey, value, policy);
}
public static T GetCacheItem(string rawKey)
{
return (T)MemoryCache.Default.Get(GetCacheKey(rawKey));
}
}
然后访问您的数据表,如下所示,以获得缓存值
DataTable dt = CacheHelper<DataTable>.GetCacheItem("MyKey");
并遵循设定值
CacheHelper<DataTable>.AddCacheItem("MyKey",dt);
注意:您必须仔细设置缓存对象的CacheItemPolicy
- 用程序搜索JQuery数据表中的文本
- 要求输入在数据列表中
- 正在将数据主题添加到所有项目
- 函数参数中的数据与指定变量之间的任何性能差异
- 在VanillaJS中模拟模型双向数据绑定
- CSS-如何定位内容数据标题
- ExtJS 5用程序点击actioncolumn gridview
- 如何在页面回发后保持Asp-Net GridView数据(来自SignalR)
- 使用 JS 重新加载 GridView 数据以节省时间
- 将 Gridview 数据保存在按钮中,然后再次加载
- 选择GridView的一行时如何显示隐藏列数据
- 只有当数据为数字或null时,才会触发删除GridView中的行时使用数据进行确认
- 将数据从弹出式gridview传递到父页面
- 使用ajax json c#将数据从数据库加载到gridview时出错
- 如何在使用JavaScript单击按钮时将选定的行数据从gridview传输到TextBoxes
- Gridview模板Javascript数据绑定
- 在end_request处理程序期间回发后,无法从asp gridview检索数据
- 在gridview行鼠标悬停,我想在另一个标签中显示行数据
- 获取javascript中的gridview数据键值
- 如何通过javascript保存GridView的数据