语境:
我经常遇到这样的情况:我们的ASP.NET页面必须在GridView上向用户显示数据,让他随心所欲地更改它(单元格上的文本框),并且只有当他实际点击时才将其保存到数据库中.保存按钮".此数据通常是页面上信息的虚拟状态,这意味着用户可以更改所有内容,而无需保存,直到他点击"保存按钮".在这些情况下,总是需要在ASP.NET回发中保留数据列表.这些数据可以是一个DataTable或只是一些的实例List<Someclass>.
我经常看到人们实现这一点并持久保存数据Session.在这种情况下,我通常也会看到一些用户导航时打开多个标签的问题,有些时候在同一页面上.两个不同选项卡的数据将合并在一起,导致信息被扰乱的问题.
如何经常使用Session的示例:
private List<SomeClass> DataList
{
get
{
return Session["SomeKey"] as List<SomeClass>;
}
set
{
Session["SomeKey"] = value;
}
}
Run Code Online (Sandbox Code Playgroud)
人们经常试图通过做这样的事情来解决它:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataList = null
}
else
{
FillGridView(DataList);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当两个标签已经加载并且用户正在更改GridView值时,出于某种奇怪的原因,他试图通过点击另一页上的"保存"按钮来保存数据呢?我个人不喜欢这个选项.
其他方法是将数据放在上面ViewState.但是,当涉及到持久存在的大型列表时,它可能会在页面存储时严重影响页面(HiddenField).
但是,这项工作的最佳方式是什么?有一次,我想Session与ViewState在哪里一起使用ViewState将保存一个唯一的标识符来索引Session保存的数据.这样可以防止在浏览器上的标签之间共享数据:
private List<SomeClass> DataList
{
get
{
if (ViewState["SomeKey"] == null)
{
ViewState["SomeKey"] = Guid.NewGuid().ToString();
}
return Session[ViewState["SomeKey"].ToString()] …Run Code Online (Sandbox Code Playgroud) 我在ASP.NET AJAX页面中维护状态时遇到问题.简短版本:我需要一些方法在进行异步回调后更新页面ViewState,以反映服务器在异步调用期间所做的任何状态更改.
这似乎是一个常见问题,但我将描述我的场景以帮助解释:
我有一个类似网格的控件,它有一些JavaScript增强功能 - 即拖放列和行的功能.当列或行被放入新位置时,将调用AJAX方法以通知控制服务器端并触发相应的服务器端事件("OnColumnMoved"或"OnRowMoved").
默认情况下,ASP.NET AJAX调用将整个页面作为请求发送.这样,页面就会经历一个完整的生命周期,视图状态会被持久化,并且在调用RaiseCallbackEvent方法之前会恢复控件的状态.
但是,由于AJAX调用不更新页面,因此即使在移动了列或行之后,ViewState 也会反映控件的原始状态.因此,第二次发生客户端操作时,AJAX请求将转到服务器,并再次构建页面和控件以反映控件的第一个状态,而不是第一个列或行移动后的状态.
这个问题延伸到许多含义.例如,如果我们有一个客户端/ AJAX操作来向网格添加新项目,然后拖动一行,则网格在服务器端构建,其项目少于客户端.
最后,最重要的是,对于我的具体示例,我们正在处理的实际数据源对象存储在ViewState页面中.这是一个设计决策,允许保留被操纵数据的有状态副本,这些数据可以在许多操作后提交给DB,如果用户退出则丢弃.这很难改变.
所以,再次,我需要一种方法,在触发AJAX方法后,在回调时更新页面ViewState.
使用时有什么区别
将StateManager在Ember.js不说,有据可查的,所以我已经得到了有关其使用的一些问题.
.goToState只从国家经理内部打电话?save: -> StateManager.send("save").这有意义还是我错过了什么?ViewState带子状态建模,还是应该使用计算属性和视图属性仅在视图中保存该信息(没有状态管理器知道视图内部状态)?**一个示例可以是三步形式,其中相同的模板用于所有状态,但是在三个步骤中显示/隐藏不同的区域.
Github参考:https://github.com/emberjs/ember.js/tree/master/packages/ember-states/lib
javascript viewstate model-view-controller state-management ember.js
在asp.net页面中,在回发期间,ViewState使数据持久化.是什么让数据在ASP.net MVC中持久存在?
脚本资源和Web资源文件在我的应用程序中生成间歇性错误.我一直试图追逐问题的原因,但无济于事.我注意到传递的"d"参数是一些损坏程度,我不能为我的生活弄清楚是什么导致这个参数被破坏.我注意到在我的应用程序中的JavaScript代码是如何与为"d"参数生成的哈希代码交织在一起的.
Exception genereated on Monday, January 26, 2009, at 2:20 AM Page location: /ScriptResource.axd?d=y9_dUwBeGqLlRpT5Dml1zhoQvfa7NKdj69EYuV771kzSsa5KOOXBfJZjk%20%20%20%20%20%20%20%20%20%20%20%20if%20(cat_gallery%20!= Requested Url : http://garmn.factoryoutletstore.com/ScriptResource.axd?d=y9_dUwBeGqLlRpT5Dml1zhoQvfa7NKdj69EYuV771kzSsa5KOOXBfJZjk if (cat_gallery != Message: Exception has been thrown by the target of an invocation. Source: mscorlib Method: System.Object _InvokeMethodFast(System.Object, System.Object[], System.SignatureStruct ByRef, System.Reflection.MethodAttributes, System.RuntimeTypeHandle) Stack Trace: at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) at System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) at …
我将从MS和ASP.NET进入Java世界,并在Java中寻找类似于基于ASP.NET组件的HTML框架.在审查了互联网上的大量链接之后,看起来JSF2(与facelets)是最匹配的(顺便说一下这是真的吗?还是有其他更好的选择?).
我在评估期间遇到的问题是正确使用JSF的视图状态.我的最终使用场景将是一个集群的WEB服务器,我不会有任何会话/服务器存储的对象,我不会使用网络带宽进行虚拟视图状态(请参阅另一个人在这里有点相关的问题JSF调整) .
我拿了一些JSF2教程并在设置了javax.faces.STATE_SAVING_METHOD = client后将ViewState生成为440个字符的HTML(omygod,页面只包含1个虚拟文本输入和1个提交按钮).在"POST on submit"中,我确实只需要来自文本输入的文本(10个字符)而不是虚拟视图状态(440个字符).
所以问题是 - 是否可以在JSF2中禁用视图状态?
相关链接:
ASP.NET中的用例 - "禁用页面的视图状态":http:
//www.ironspeed.com/articles/Disable%20View%20State%20for%20a%20Page/Article.aspx
stackoverflow上没有帮助的答案:
如何在JSF中减少javax.faces.ViewState
更新:相关链接(来自以下评论):
我一直听到这个词"Viewstate Chunking".什么是Viewstate Chunking?
它是如何为ASP.NET页面工作的?
我有一个类型列表List<JobSeeker>.我想将它存储在ViewState中.怎么做到这一点?
private List<JobSeeker> JobSeekersList { get; set; }
Run Code Online (Sandbox Code Playgroud)