首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

asp.net上完全消除掉ViewState该注意一些什么?

2012-12-25 
asp.net下完全消除掉ViewState该注意一些什么???面试遇到过,但是一直没怎么在意,今天感觉这个问题还是比较

asp.net下完全消除掉ViewState该注意一些什么???
面试遇到过,但是一直没怎么在意,今天感觉这个问题还是比较重要的,所以翻出来问问?

其实主要是问问GridView这样的ViewState超级生产户在禁用了ViewState时该如何“生存”?

能给个例子最好了。


以前试着写了一个绑定DropDownLIst的demo,在没有禁掉viewstate时,只需要在Page_Load()事件里面写


if(!IsPostback)
{
    Bind();//绑定ddl控件
}

那么这样再在页面回发时不用执行Bind()函数,ddl控件里面的值还是存在的——个人感性的认为,少执行一遍Bind()代码,相对维护viewstate影响的性能差不多。:-D

当我禁掉viewstate时,在页面会发时,ddl控件里面的值就没有了(我的解决方法是去掉if(!IsPostback){}这个判断,等于每次加载页面的时候都执行一次,感觉性能肯定有点影响,所以还不如保持viewstate得了。)

请问这两种方法那种好呢?又或者都是比较菜的???

大牛们都出来!
谢谢!


[最优解释]
引用:
比如说你随便放一个Label控件,假设操作中你把它的ForeColor修改了,假设禁用ViewState,那么任何回发都会让你丢失这个状态。而假设你自己维护它......一个复杂的交互页面上你需要维护的这类状态何止成千上万?!

对于只是想做网页的,可以考虑禁用ViewState。对于想做交互应用程序的,首要地是先想好应该如何测试交互操作过程,然后才编码,而不能为了编码而编码。


不是很理解。。

能否再明白点。我没写过测试代码。。
[其他解释]
我已经给你说的很清楚了,楼主,为何你不看呢
[其他解释]
禁用ViewState 后

你看ItemCommand还能使不。
[其他解释]
1.不想要viewstate就不要用asp.net了,以现在的技术手段,html+js+WCF不比asp.net逊色
  你可以自己从头写js库,也可以结合JQ,MsAjax.js等开源库
2.即使使用html+js,往返的数据交易量也不见得比asp.net少
  很多人仅仅是看到页面上没有hidden,心里面就舒坦了
[其他解释]
既想依托ASP.NET强大与便利,又不想看到ViewState,可以使用ASP.NET MVC替换ASP.NET WebForm
MVC可自由控制HTML的输出
此观点纯属个人愚见
[其他解释]
注意测试各种交互操作
[其他解释]
viewstate 是服务器控件的专属,用来页面回发时保存服务器控件的value;
会产生额外的hidden在里面; 那么如果像服务器控件比如绑定控件,少了viewstate很多高级功能就无法使用;
所以,如果你是前台 建议少用服务器控件,禁用viewstate,改用js+div+css+轻量级的ashx或者wcf,来做你的webform;或者干脆用asp.net mvc好了,这个更直接!
 后台的话,用服务器控件可以提高生产率,还是建议使用,毕竟后台是几个人用罢了,性能无所谓功能实现就ok!!
欢迎.net家族的斗士们,踊跃加入,共同探讨微软.net的奥秘,共同维护和推广.net的应用!69594961
[其他解释]
比如说你随便放一个Label控件,假设操作中你把它的ForeColor修改了,假设禁用ViewState,那么任何回发都会让你丢失这个状态。而假设你自己维护它......一个复杂的交互页面上你需要维护的这类状态何止成千上万?!

对于只是想做网页的,可以考虑禁用ViewState。对于想做交互应用程序的,首要地是先想好应该如何测试交互操作过程,然后才编码,而不能为了编码而编码。
[其他解释]
我有时做网站时也会试着禁用ViewState但做交互型的应用程序时就不大敢去禁用,因为对它的了解的不够深!
不过我个人也很爱好html+js+wcf
[其他解释]
引用:
我有时做网站时也会试着禁用ViewState但做交互型的应用程序时就不大敢去禁用,因为对它的了解的不够深!
不过我个人也很爱好html+js+wcf
[其他解释]

这个问题俺也想知道
[其他解释]
大牛来了.
[其他解释]
该回复于2012-05-05 14:27:32被版主删除
[其他解释]
你不能一方面享受这代理人提供的方便,
另一方面有不让代理人占用任何资源
[其他解释]
webService这种方式的开发,ASP.NET MVC也很有意思,但了解的不够深,感觉太依赖于微软了,引用了好多东西。我还是偏喜欢开源的。
[其他解释]
大部份情况完全可以禁用ViewState,对你的应用程序毫无影响。

至于在GridView中,我记得是禁用ViewState后,分页数字点了将会没有反应。也就是不能分页了。


[其他解释]
webService这种方式的开发,ASP.NET MVC也很有意思,但了解的不够深,感觉太依赖于微软了,引用了好多东西。我还是偏喜欢开源的。



和我感觉差不多。。

不过我不喜欢“太过分”使用js,举一个例子,“全选”操作,不管js是否发挥作用(是否被警用掉),都不会影响你的程序,如果用户禁掉了js,那么他就只能一个一个的单选了。。。

我觉得比较重要的功能、禁用掉js就应影响程序运行的……都不应该使用js实现!

客户怎么操作是他的权利,就连腾讯都要变相的说将选择权交给用户。
[其他解释]
ViewState并完全是一个坏东西,甚至你可以自己往里面存信息。
[其他解释]
引用:
神马服务器控件都不能用了.


服务器控件都可以用。
[其他解释]
引用:
这个问题俺也想知道


还是小鸟抢楼厉害。。。

哈哈哈~~~
[其他解释]
引用:
大牛来了.


阿哲来点BH的回答啊!!
[其他解释]
引用:
怎么就40分啊!(9528)


兄弟你要多少分啊?

助人为乐也是一种快乐,如果你学会了,就是一种财富。。。

呵呵~~~
[其他解释]
引用:
禁用ViewState 后

你看ItemCommand还能使不。


谢谢,明天有时间我去“了解了解”!!
[其他解释]
引用:
1.不想要viewstate就不要用asp.net了,以现在的技术手段,html+js+WCF不比asp.net逊色
  你可以自己从头写js库,也可以结合JQ,MsAjax.js等开源库
2.即使使用html+js,往返的数据交易量也不见得比asp.net少
  很多人仅仅是看到页面上没有hidden,心里面就舒坦了


不懂wcf,也是做web方面的吗???

不管别人怎么样,我需要了解了解,明白了才能有自己的理解、自己的方法嘛。。
[其他解释]
引用:
你不能一方面享受这代理人提供的方便,
另一方面有不让代理人占用任何资源


即使不能得到满意的答案、理想的结果。。。

也可以当做一个了解.net的“切入点”嘛!!!

用很多个“不理解”去“围剿”.net !!!
[其他解释]
引用:
既想依托ASP.NET强大与便利,又不想看到ViewState,可以使用ASP.NET MVC替换ASP.NET WebForm
MVC可自由控制HTML的输出
此观点纯属个人愚见


干想很重要!!!

睡觉了,明天再看,各位晚安!
[其他解释]
引用:
viewstate 是服务器控件的专属,用来页面回发时保存服务器控件的value;
会产生额外的hidden在里面; 那么如果像服务器控件比如绑定控件,少了viewstate很多高级功能就无法使用;
所以,如果你是前台 建议少用服务器控件,禁用viewstate,改用js+div+css+轻量级的ashx或者wcf,来做你的webform;或者干脆用asp.net mvc好了,这个更直接!
……


使用“js+div+css+轻量级的ashx或者wcf”跟asp.net.mvc有什么关系?都避免回发了,那么后台使用任何跟控件没有关系的东西比如ashx、asmx都是与控件无关的处理请求的直接方法,不是说只有asp.net mvc才可以处理请求。
[其他解释]
http://msdn.microsoft.com/zh-cn/library/y5y3c2c5(v=vs.80).aspx

http://msdn.microsoft.com/zh-cn/library/75x4ha6s(v=VS.90).aspx

http://msdn.microsoft.com/zh-cn/library/system.web.ui.control.viewstate(v=VS.90).aspx




[其他解释]
从缓存的角度看,ViewState很有用,因为他可以作为页面的一部分,缓存仅仅与某个特定页面相关的信息。
------其他解决方案--------------------


神马服务器控件都不能用了.
[其他解释]

引用:
大部份情况完全可以禁用ViewState,对你的应用程序毫无影响。

至于在GridView中,我记得是禁用ViewState后,分页数字点了将会没有反应。也就是不能分页了。

是否禁用,要看页面是否需要回发。
[其他解释]
引用:
面试遇到过,但是一直没怎么在意,今天感觉这个问题还是比较重要的,所以翻出来问问?

其实主要是问问GridView这样的ViewState超级生产户在禁用了ViewState时该如何“生存”?

能给个例子最好了。


以前试着写了一个绑定DropDownLIst的demo,在没有禁掉viewstate时,只需要在Page_Load()事件里面写

C# code

if(!……

就lz举的这个例子
当我禁掉viewstate时,在页面会发时,ddl控件里面的值就没有了(我的解决方法是去掉if(!IsPostback){}这个判断,等于每次加载页面的时候都执行一次,感觉性能肯定有点影响,所以还不如保持viewstate得了。)

去掉if(!ispostback)每次都会在执行一遍绑定,这样你选的值无论什么都是第一项。

你可以在oninit事件中给dropdownlist绑定,不要在load事件中。

[其他解释]
简单的说,就是无法通过<form>进行会发的HTML元素的值,比如Span,必须通过隐藏字段回发,所以就有了ViewSatate,不知道你是否明白?
[其他解释]
ViewState 是干嘛的? 用它有什么意义么?  不用行不行?
[其他解释]
引用:
引用:

我有时做网站时也会试着禁用ViewState但做交互型的应用程序时就不大敢去禁用,因为对它的了解的不够深!
不过我个人也很爱好html+js+wcf
[其他解释]
引用:
引用:
面试遇到过,但是一直没怎么在意,今天感觉这个问题还是比较重要的,所以翻出来问问?

其实主要是问问GridView这样的ViewState超级生产户在禁用了ViewState时该如何“生存”?

能给个例子最好了。


以前试着写了一个绑定DropDownLIst的demo,在没有禁掉viewstate时,只需要在Page_Load()事……
即使去掉viewstate在oninit事件中也可以获取到值。
[其他解释]
即使去掉viewstate在oninit事件中绑定回发后也可以获取到值。
[其他解释]
引用:
引用:
引用:

我有时做网站时也会试着禁用ViewState但做交互型的应用程序时就不大敢去禁用,因为对它的了解的不够深!
不过我个人也很爱好html+js+wcf
[其他解释]
webService这种方式的开发,ASP.NET MVC也很有意思,但了解的不够深,感觉太依赖于微软了,引用了好多东西。我还是……


电脑是我的,想怎么玩就怎么玩,呵呵!!

如果是这样的话那我们也不必写哪么麻烦但是兼容性强的css代码了。。
[其他解释]
webService这种方式的开发,ASP.NET MVC也很有意思,但了解的不够深,感觉太依赖于微软了,引用了好多东西。我还是偏喜欢开源的。


和我感觉差不多。。

不……

现在普遍的用户是不会去禁用JS的。现在禁用了JS程序运行不起来,我觉得不过分!比如说“没事你去禁用它做什么?”
[其他解释]
引用:
引用:
面试遇到过,但是一直没怎么在意,今天感觉这个问题还是比较重要的,所以翻出来问问?

其实主要是问问GridView这样的ViewState超级生产户在禁用了ViewState时该如何“生存”?

能给个例子最好了。


以前试着写了一个绑定DropDownLIst的demo,在没有禁掉viewstate时,只需要在Page_Load()……


试了一下,这个不错,确实也能解决问题。。。
[其他解释]
引用:
我只想知道在禁掉viewstate后达到未禁用之前的效果。。。


[其他解释]
引用:
我已经给你说的很清楚了,楼主,为何你不看呢


呵呵,不要生气,你是说了。。

但是说得并不是很清楚。。
------其他解决方案--------------------


引用:
ViewState 是干嘛的? 用它有什么意义么?  不用行不行?


主要是用来维持控件状态的。。

用的意义是方便开发。。

不用也可以,不过比较麻烦。。

现在我就想试试这种比较麻烦的做法。。

其实viewstate不仅仅是生成隐藏字段带来负面影响。其实维持这个viewstate也是消耗性能的一方面。。。

我不想纠结这两种的方法(是否禁用viewstate)那种更好、更合理。。。

我只想知道在禁掉viewstate后达到未禁用之前的效果。。。
[其他解释]
引用:
..........这还不清楚.............


你只说明了有问题,但没有说明怎么解决。。。

我需要的是30楼的朋友那样的回答!!!
[其他解释]
引用:
其实viewstate不仅仅是生成隐藏字段带来负面影响。其实维持这个viewstate也是消耗性能的一方面。。。
-----------------------------
何讲?


我只想知道在禁掉viewstate后达到未禁用之前的效果。。。
--------------------------------……


何讲?
这个问题我是在msdn上看到的。其中有好几个生命周几的事件里面都用到了,viewstate,所以在创建viewstate、还原viewstate的时候至少会有点消影响吧。。

另外我说的生成隐藏字段带来的负面影响指的是,当页面生成的viewstate过大时,会有宽带传输的压力。。。
[其他解释]
..........这还不清楚.............
[其他解释]
其实viewstate不仅仅是生成隐藏字段带来负面影响。其实维持这个viewstate也是消耗性能的一方面。。。
-----------------------------
何讲?


我只想知道在禁掉viewstate后达到未禁用之前的效果。。。
--------------------------------------------
如果你想用自己的方式去实现viewstate的效果,全面衡量后你会发现 viewstate 的做法确实在 webform 中已经是最简形式了。
[其他解释]
楼上很多牛人都已经说清楚了,个人比较赞同sp1234的说法,个人愚见,ViewState主要是用来维持服务器的回发事件时,保持服务器控件的状态,当然也包括一些服务器的属性和值等,象gridview\repeater这类控件都是用来显示和交互数据库数据用的,所以如果只是用来显示的话,我认为完全可以禁掉ViewState,不过这样也还是会有一小部分的ViewState,因为你的gridview\repeater是要放在form的runat="server"里的.但如果gridview\repeater里有服务器事件的回发,就不要禁掉ViewState了.
 

[其他解释]
基于你的提问:
在ASP.NET框架下,你想要完全禁用ViewState,那你就要完全手动去做到ViewState要做的.

所以在ASP.NET下完全禁用ViewState对于业务交互频繁,回发频繁的业务系统,是相当划不来,会更加没有效率.

因此你想要完全禁用ViewState,就要跳出ASP.NET框架.

引用:
引用:

我不是说一定要以自己的方法实现viewstate

我只是想找一种“更有效率”的开发方式。。。

[其他解释]
引用:
其实viewstate不仅仅是生成隐藏字段带来负面影响。其实维持这个viewstate也是消耗性能的一方面。。。
-----------------------------
何讲?


我只想知道在禁掉viewstate后达到未禁用之前的效果。。。
--------------------------------……


我不是说一定要以自己的方法实现viewstate

我只是想找一种“更有效率”的开发方式。。。
[其他解释]
哎,不跟你说了
[其他解释]
要完全去掉。请去掉form runat=server 中的 runat=server
然后代码中加
 public override void VerifyRenderingInServerForm(Control control)
  { }

[其他解释]
引用:
另外我说的生成隐藏字段带来的负面影响指的是,当页面生成的viewstate过大时,会有宽带传输的压力。。。

不管怎么说在asp.net中,或多或少肯定会产生viewstate
如果viewstate太大的话你可以在保存视图状态时对viewstate进行压缩
在加载到页面时对viewstate进行解压
------其他解决方案--------------------


不错:这个问题至少知道了几点。


交互性强的运用类的网站,呵呵!!

30楼的那个。。
[其他解释]

引用:
基于你的提问:
在ASP.NET框架下,你想要完全禁用ViewState,那你就要完全手动去做到ViewState要做的.

所以在ASP.NET下完全禁用ViewState对于业务交互频繁,回发频繁的业务系统,是相当划不来,会更加没有效率.

因此你想要完全禁用ViewState,就要跳出ASP.NET框架.

引用:

引用 42 ……


嗯,这个理由是比较充分,和sp1234说的差不多。。。

看来没有更好的办法了。。。

如果要禁掉viewstate的话,那就换一种方法实现了。。

例如:用js方面的表格插件来代替GridView这样的数据控件了。。。
[其他解释]
这个问题我是在msdn上看到的。其中有好几个生命周期的事件里面都用到了,viewstate,所以在创建viewstate、还原viewstate的时候至少会有点消影响吧。。

另外我说的生成隐藏字段带来的负面影响指的是,当页面生成的viewstate过大时,会有宽带传输的压力。。。
-------------------------------------------------------
没错,会有 SaveViewState 和 LoadViewState。生成viewstate过大 传输也会会受影响。

但这并不是放弃viewstate的原因,如果你要放弃它,那么唯一的原因应该是你的应用不需要它。

选择某个事物的时候,应该考虑它的利和弊。 

对于viewstate来说利就是字面所呈现的“视图状态保持”的简单

适用的场景是 页面回发(非异步)后的视图状态保持,因为异步的情况状态都在不存在需要保持这一说。

基于这个前提去找相关的解决方案,会发现做法很类似付出的成本也一样,但 viewstate 从效率,融合度,

易用性上都是最优的。


[其他解释]
引用:
可以将ViewState保存在服务器,重写Page类的LoadPageStateFromPersistenceMedium和SavePageStateToPersistenceMedium方法。

C# code
    public const string ViewKeyName = "__viewkey";

    protected void Page_Load(object s……


谢谢!!!
[其他解释]
可以将ViewState保存在服务器,重写Page类的LoadPageStateFromPersistenceMedium和SavePageStateToPersistenceMedium方法。

    public const string ViewKeyName = "__viewkey";

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!this.IsPostBack)
        {
            this.viewlabel.Text = "not postback";
            this.ViewState["ok"] = "this is the ViewState text";
        }
        else
        {
            this.viewlabel.Text = (string)this.ViewState["ok"];
        }
    }

    protected override void SavePageStateToPersistenceMedium(object state)
    {
        string key = Guid.NewGuid().ToString();
        this.ClientScript.RegisterHiddenField(ViewKeyName, key);
        this.Cache[key] = state;
    }

    protected override object LoadPageStateFromPersistenceMedium()
    {
        string key = this.Request[ViewKeyName];
        if (key == null)
            throw new InvalidOperationException("Invalid ViewState Key");


        object state = this.Cache[key];
        if (state == null)
            throw new InvalidOperationException("ViewState too old");
        return state;
    }


[其他解释]
asp.net下完全消除ViewState,是在替微软想一个代替ViewState的解决方案吗。
[其他解释]
引用:
1.不想要viewstate就不要用asp.net了,以现在的技术手段,html+js+WCF不比asp.net逊色
  你可以自己从头写js库,也可以结合JQ,MsAjax.js等开源库
2.即使使用html+js,往返的数据交易量也不见得比asp.net少
  很多人仅仅是看到页面上没有hidden,心里面就舒坦了


asp.net MVC也属于asp.net 你找下ViewState
[其他解释]
引用:
1.不想要viewstate就不要用asp.net了,以现在的技术手段,html+js+WCF不比asp.net逊色
  你可以自己从头写js库,也可以结合JQ,MsAjax.js等开源库
2.即使使用html+js,往返的数据交易量也不见得比asp.net少
  很多人仅仅是看到页面上没有hidden,心里面就舒坦了



同意,不过有的人禁止viewstate为了搜索引擎更好的抓取.
[其他解释]
引用:
这个问题我是在msdn上看到的。其中有好几个生命周期的事件里面都用到了,viewstate,所以在创建viewstate、还原viewstate的时候至少会有点消影响吧。。

另外我说的生成隐藏字段带来的负面影响指的是,当页面生成的viewstate过大时,会有宽带传输的压力。。。
------------------------------------------------------……


嗯,谢谢啦!!!

有机会我把你的话转达给面试官听听,看看他们还有什么疑问!


[其他解释]
建议内部应用系统还是要用ViewState比较好,否则可以使用ASP.NET MVC
[其他解释]
引用:
EnableViewState="false" 不能使用 foreach (Control c in this.Repeater1.Controls) 遍历控件


禁用掉viewstate很定有很多麻烦的。。

这个需要研究一下再禁用,不然是自找麻烦。。

其实上面说得很明白了。。

一般的主要用来浏览性质的网站,禁掉viewstate没啥影响。。

至于后台嘛,用的人很定要少一点,禁不禁用也没什么大不了的。。
[其他解释]
看你怎么使用,可以禁用。。

翻页可以用aspnetpager那个控件。。

完全可以达到你想要的效果。
[其他解释]
看你怎么使用,可以禁用。。

翻页可以用aspnetpager那个控件。。

完全可以达到你想要的效果。回发事件就得好好控制..处理 .
[其他解释]
记忆中,禁用后,下一次刷新数据就没了。。要重新获取,datalist不能联动
[其他解释]
EnableViewState="false" 不能使用 foreach (Control c in this.Repeater1.Controls) 遍历控件

热点排行