面试遇到过,但是一直没怎么在意,今天感觉这个问题还是比较重要的,所以翻出来问问?其实主要是问问GridView这样的ViewState超级生产户在禁用了ViewState时该如何“生存”?能给个例子最好了。
以前试着写了一个绑定DropDownLIst的demo,在没有禁掉viewstate时,只需要在Page_Load()事件里面写if(!IsPostback)
{
Bind();//绑定ddl控件
}那么这样再在页面回发时不用执行Bind()函数,ddl控件里面的值还是存在的——个人感性的认为,少执行一遍Bind()代码,相对维护viewstate影响的性能差不多。:-D当我禁掉viewstate时,在页面会发时,ddl控件里面的值就没有了(我的解决方法是去掉if(!IsPostback){}这个判断,等于每次加载页面的时候都执行一次,感觉性能肯定有点影响,所以还不如保持viewstate得了。)请问这两种方法那种好呢?又或者都是比较菜的???大牛们都出来!
谢谢!
以前试着写了一个绑定DropDownLIst的demo,在没有禁掉viewstate时,只需要在Page_Load()事件里面写if(!IsPostback)
{
Bind();//绑定ddl控件
}那么这样再在页面回发时不用执行Bind()函数,ddl控件里面的值还是存在的——个人感性的认为,少执行一遍Bind()代码,相对维护viewstate影响的性能差不多。:-D当我禁掉viewstate时,在页面会发时,ddl控件里面的值就没有了(我的解决方法是去掉if(!IsPostback){}这个判断,等于每次加载页面的时候都执行一次,感觉性能肯定有点影响,所以还不如保持viewstate得了。)请问这两种方法那种好呢?又或者都是比较菜的???大牛们都出来!
谢谢!
你可以自己从头写js库,也可以结合JQ,MsAjax.js等开源库
2.即使使用html+js,往返的数据交易量也不见得比asp.net少
很多人仅仅是看到页面上没有hidden,心里面就舒坦了
不懂wcf,也是做web方面的吗???不管别人怎么样,我需要了解了解,明白了才能有自己的理解、自己的方法嘛。。
即使不能得到满意的答案、理想的结果也可以当做一个了解.net的“切入点”嘛!!!用很多个“不理解”去“围剿”.net !!!
MVC可自由控制HTML的输出
此观点纯属个人愚见
会产生额外的hidden在里面; 那么如果像服务器控件比如绑定控件,少了viewstate很多高级功能就无法使用;
所以,如果你是前台 建议少用服务器控件,禁用viewstate,改用js+div+css+轻量级的ashx或者wcf,来做你的webform;或者干脆用asp.net mvc好了,这个更直接!
后台的话,用服务器控件可以提高生产率,还是建议使用,毕竟后台是几个人用罢了,性能无所谓功能实现就ok!!
欢迎.net家族的斗士们,踊跃加入,共同探讨微软.net的奥秘,共同维护和推广.net的应用!69594961
使用“js+div+css+轻量级的ashx或者wcf”跟asp.net.mvc有什么关系?都避免回发了,那么后台使用任何跟控件没有关系的东西比如ashx、asmx都是与控件无关的处理请求的直接方法,不是说只有asp.net mvc才可以处理请求。
不过我个人也很爱好html+js+wcf|webService这种方式的开发,ASP.NET MVC也很有意思,但了解的不够深,感觉太依赖于微软了,引用了好多东西。我还是偏喜欢开源的。
和我感觉差不多。。不过我不喜欢“太过分”使用js,举一个例子,“全选”操作,不管js是否发挥作用(是否被警用掉),都不会影响你的程序,如果用户禁掉了js,那么他就只能一个一个的单选了我觉得比较重要的功能、禁用掉js就应影响程序运行的……都不应该使用js实现!客户怎么操作是他的权利,就连腾讯都要变相的说将选择权交给用户。
当我禁掉viewstate时,在页面会发时,ddl控件里面的值就没有了(我的解决方法是去掉if(!IsPostback){}这个判断,等于每次加载页面的时候都执行一次,感觉性能肯定有点影响,所以还不如保持viewstate得了。)去掉if(!ispostback)每次都会在执行一遍绑定,这样你选的值无论什么都是第一项。你可以在oninit事件中给dropdownlist绑定,不要在load事件中。
电脑是我的,想怎么玩就怎么玩,呵呵!!如果是这样的话那我们也不必写哪么麻烦但是兼容性强的css代码了。。
主要是用来维持控件状态的。。用的意义是方便开发。。不用也可以,不过比较麻烦。。现在我就想试试这种比较麻烦的做法。。其实viewstate不仅仅是生成隐藏字段带来负面影响。其实维持这个viewstate也是消耗性能的一方面我不想纠结这两种的方法(是否禁用viewstate)那种更好、更合理我只想知道在禁掉viewstate后达到未禁用之前的效果
-----------------------------------------------------------------
何讲?
我只想知道在禁掉viewstate后达到未禁用之前的效果
--------------------------------------------
如果你想用自己的方式去实现viewstate的效果,全面衡量后你会发现 viewstate 的做法确实在 webform 中已经是最简形式了。
何讲?
这个问题我是在msdn上看到的。其中有好几个生命周几的事件里面都用到了,viewstate,所以在创建viewstate、还原viewstate的时候至少会有点消影响吧。。另外我说的生成隐藏字段带来的负面影响指的是,当页面生成的viewstate过大时,会有宽带传输的压力
我不是说一定要以自己的方法实现viewstate我只是想找一种“更有效率”的开发方式
在ASP.NET框架下,你想要完全禁用ViewState,那你就要完全手动去做到ViewState要做的.所以在ASP.NET下完全禁用ViewState对于业务交互频繁,回发频繁的业务系统,是相当划不来,会更加没有效率.因此你想要完全禁用ViewState,就要跳出ASP.NET框架.
嗯,这个理由是比较充分,和sp1234说的差不多看来没有更好的办法了如果要禁掉viewstate的话,那就换一种方法实现了。。例如:用js方面的表格插件来代替GridView这样的数据控件了
如果viewstate太大的话你可以在保存视图状态时对viewstate进行压缩
在加载到页面时对viewstate进行解压
然后代码中加
public override void VerifyRenderingInServerForm(Control control)
{ }
{
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;
}
-------------------------------------------------------
没错,会有 SaveViewState 和 LoadViewState。生成viewstate过大 传输也会会受影响。但这并不是放弃viewstate的原因,如果你要放弃它,那么唯一的原因应该是你的应用不需要它。选择某个事物的时候,应该考虑它的利和弊。 对于viewstate来说利就是字面所呈现的“视图状态保持”的简单适用的场景是 页面回发(非异步)后的视图状态保持,因为异步的情况状态都在不存在需要保持这一说。基于这个前提去找相关的解决方案,会发现做法很类似付出的成本也一样,但 viewstate 从效率,融合度,易用性上都是最优的。
asp.net MVC也属于asp.net 你找下ViewState
禁用掉viewstate很定有很多麻烦的。。这个需要研究一下再禁用,不然是自找麻烦。。其实上面说得很明白了。。一般的主要用来浏览性质的网站,禁掉viewstate没啥影响。。至于后台嘛,用的人很定要少一点,禁不禁用也没什么大不了的。。
一些button的事件是不需要的